Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour les gens!
Me revoilà avec une petite question. C'est assez bête en soi, mais je colle là...
J'ai une fonction externe:
Function ulong LoadImage(Ulong hinst, Ref String lpszName, Ulong uType, Long cxDesired, Long cyDesired, Ulong fuLoad) LIBRARY "user32.dll" ALIAS FOR "LoadImageA;ansi"
référencée ici: http://msdn.microsoft.com/en-us/library … 85%29.aspx
Je l'ai mappée en pb pour charger un fichier bmp et obtenir son handle (of_loadimage):
uLong lul_hinst, lul_uType, lul_fuLoad, lul_res long ll_cxDesired, ll_cyDesired lul_hinst = 0 // car bitmap file lul_uType = 0 // car bitmap file ll_cxDesired = 0 ll_cyDesired = 0 lul_fuLoad = 16 + 8192 // LR_LOADFROMFILE et LR_CREATEDIBSECTION lul_res = LoadImage(lul_hinst, as_lpszName, lul_uType, ll_cxDesired, ll_cyDesired, lul_fuLoad) return lul_res
Et puis je fais ceci:
ulong ul_handle, lul_lasterror string ls_filename u_nv_user32 lu_nv_user32 u_nv_kernel32 lu_nv_kernel32 lu_nv_user32 = create u_nv_user32 lu_nv_kernel32 = create u_nv_kernel32 ls_filename = "D:\develop\sphere.bmp" lul_handle = lu_nv_user32.of_loadimage(ls_filename) if lul_handle = 0 then lul_lasterror = lu_nv_kernel32.of_getlasterror() messagebox("Erreur","Erreur lors du of_loadimage: "+string(lul_lasterror)) end if
Et ça ne fonctionne malheureusement pas... le getlasterror me rend le code 126:
http://msdn.microsoft.com/en-us/library … 85%29.aspx (The specified module could not be found)
Alors que je n'utilise pas le mode "module" de loadimage, mais le mode de chargement par fichier...
Une idée messieurs? Toute piste est la bienvenue!
Dernière modification par Shed (03-12-2012 19:53:33)
Hors ligne
Bonjour,
sur la page de la doc, pour le paramètre lul_hinst, je vois que
To load a stand-alone resource (icon, cursor, or bitmap file)—for example, c:\myimage.bmp—set this parameter to NULL.
Tu l'initialises à 0 :
lul_hinst = 0 // car bitmap file
ce n'est pas identique à NULL. Essaies avec un SetNull() ?
Dernière modification par Geo (26-11-2012 16:10:09)
Hors ligne
Geo a écrit:
Tu l'initialises à 0 :
Code:
lul_hinst = 0 // car bitmap filece n'est pas identique à NULL. Essaies avec un SetNull() ?
Si, pour les appels à l'API Windows qui est codée en C ( / C++), NULL = 0.
Hors ligne
Salut,
J'ai effectué un test avec PB 10.2 ( car je travaille avec actuellement ) ton code fonctionne parfaitement. ( je suis sur une plateforme windows 7 64 bits ).
J'aurais plutot tendance à regarder du coté du chargement de la dll user32.dll. Cette dll n'aurait t'elle pas une dépendance avec une autre dll qu'il ne trouve pas ?
Tu es sur quel environnement ?
Voit tu correctement au travers de ton path la dll user32.dll ?
Ce ne sont que des pistes à explorer car je ne vois pas vraiment ou se situe le problème
Cdt
Yanis
Hors ligne
Au passage, ne perdons pas les bonnes habitudes :
Hors ligne
erasorz a écrit:
Au passage, ne perdons pas les bonnes habitudes
C'est fait :-)
Yanis a écrit:
Salut,
J'ai effectué un test avec PB 10.2 ( car je travaille avec actuellement ) ton code fonctionne parfaitement. ( je suis sur une plateforme windows 7 64 bits ).
Je suis à moitié rassuré :-)
Yanis a écrit:
J'aurais plutot tendance à regarder du coté du chargement de la dll user32.dll. Cette dll n'aurait t'elle pas une dépendance avec une autre dll qu'il ne trouve pas ?
J'y ai pensé, mais je ne vois pas comment obtenir tous les appels en cascades des différentes dll... Et puis je suis quand même étonné qu'un appel à une api win32 de base plante à cause d'un dll manquant ou pas bien rangé...
Yanis a écrit:
Tu es sur quel environnement ?
Windows 7 Professionnel 64 bits (SP1)
Yanis a écrit:
Voit tu correctement au travers de ton path la dll user32.dll ?
J'ai %SystemRoot%\system32 dans mon path system (pas dans le path utilisateur). Et de toute façon, je n'ai pas copié la dll dans le répertoire de mon appli et j'arrive à appeler d'autres api de la dll correctement.
Yanis a écrit:
Ce ne sont que des pistes à explorer car je ne vois pas vraiment ou se situe le problème
Moi non plus
Hors ligne
Shed a écrit:
Yanis a écrit:
J'aurais plutot tendance à regarder du coté du chargement de la dll user32.dll. Cette dll n'aurait t'elle pas une dépendance avec une autre dll qu'il ne trouve pas ?
J'y ai pensé, mais je ne vois pas comment obtenir tous les appels en cascades des différentes dll... Et puis je suis quand même étonné qu'un appel à une api win32 de base plante à cause d'un dll manquant ou pas bien rangé...
bonjour, pour obtenir les dépendances en cascade (statiquement ou dynamiquement via le profiling), tu peux utiliser l'outil décrit ici
Hors ligne
Bon... J'ai des nouvelles du front.
C'est assez étrange en fait, le problème vient de l'image. J'ai donc essayé avec une image de test créée avec gimp en 24 bits:
http://www.2shared.com/photo/vMuLTqXk/test.html
Ca ne passe pas.
Puis j'ai essayé avec une autre image, prise du net (je suis certain que vous apprécierez)...
http://www.2shared.com/photo/FDl9BoxM/Durum.html
Et ça fonctionne...
Par contre, j'ai regardé les propriétés des différentes images et ... hummm... je ne vois aucune différence...
Hors ligne
Bon, on peut considérer le sujet comme résolu. La conclusion de l'affaire est la suivante: loadimage est super touchy, il ne prend en entrée que des bitmap valides au bit près. Si vous hésitez, faites un save as avec photoshop.
Hors ligne