Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 26-11-2012 15:44:11

Shed  
Membre Geek
Date d'inscription: 06-01-2011
Messages: 62
Pépites: 260
Banque: 0

[RESOLU] Appel d'une fonction externe: LoadImage

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:

Code: pb

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):

Code: pb

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:

Code: pb

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

 

#2 26-11-2012 16:09:41

Geo  
Membre completement Geek
Lieu: Binche
Date d'inscription: 15-12-2008
Messages: 119
Pépites: 378
Banque: 0

Re: [RESOLU] Appel d'une fonction externe: LoadImage

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 :

Code:

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)


Rien ne sert de courir, il faut partir à point .

Hors ligne

 

#3 26-11-2012 16:20:56

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Appel d'une fonction externe: LoadImage

Geo a écrit:

Tu l'initialises à 0 :

Code:

lul_hinst = 0 // car bitmap file

ce 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.


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#4 26-11-2012 17:02:17

Yanis  
Modérateur
Lieu: paris
Date d'inscription: 16-06-2010
Messages: 349
Pépites: 665
Banque: 150

Re: [RESOLU] Appel d'une fonction externe: LoadImage

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

 

#5 26-11-2012 18:37:49

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Appel d'une fonction externe: LoadImage

Au passage, ne perdons pas les bonnes habitudes :


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#6 27-11-2012 08:00:07

Shed  
Membre Geek
Date d'inscription: 06-01-2011
Messages: 62
Pépites: 260
Banque: 0

Re: [RESOLU] Appel d'une fonction externe: LoadImage

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

 

#7 27-11-2012 08:21:47

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: [RESOLU] Appel d'une fonction externe: LoadImage

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


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#8 27-11-2012 08:42:25

Shed  
Membre Geek
Date d'inscription: 06-01-2011
Messages: 62
Pépites: 260
Banque: 0

Re: [RESOLU] Appel d'une fonction externe: LoadImage

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

 

#9 03-12-2012 19:52:40

Shed  
Membre Geek
Date d'inscription: 06-01-2011
Messages: 62
Pépites: 260
Banque: 0

Re: [RESOLU] Appel d'une fonction externe: LoadImage

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

 

Pied de page des forums

Propulsé par FluxBB 1.2.22