Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Déclaration d'une DLL C en VB 6.0

2 réponses
Avatar
jean saint jalmes
Bonjour,

Dans une application VB6.0, je dois utiliser les services d'une API écrite
en C.

Plusieurs fonctions de cette API utilisent des paramètres d'entré et de
sortie de type char* (pointeur sur une chaîne) et char** (pointeur sur un
pointeur de chaîne ?) et je ne sais pas traduire correctement ces 2 types en
déclaration VB.

Exemples : const char* API_getVersion(void);
int API_initialize(const char* Version, char** Description);

Le paramètre char** Description est en sortie.

J'ai déclaré ces 2 fonctions sous VB comme suit :

private declare function API_getVersion LIB "API_Lib" () as string
private declare function API_initialize LIB "API_Lib" (byval Version as
string, Ptr as long ) as long

et je les utilise comme suit :

private sub ......
Dim Version as string
Dim Ptr as long
Dim Result as long

Version = API_getVersion
Result = API_initialize(Version,Ptr)
end sub

L'instruction Version = API_getVersion fonctionne bien sauf que je suis
obligé de rechercher le null binaire pour calculer la longueur de la chaîne
renvoyée par l'API.

La deuxième instruction ne fonctionne pas et VB me renvoie le message
"Convention d'appel de DLL incorrecte".

Pouvez-vous m'aider ?

Merci d'avance, Jean

2 réponses

Avatar
Patrice Henrio
Je n'ai pas vérifié mais je crois que l'on ne peut pas passer une string par
valeur dans une API, essaie ByRef au lieu de ByVal.



"jean saint jalmes" a écrit dans
le message de news:
Bonjour,

Dans une application VB6.0, je dois utiliser les services d'une API écrite
en C.

Plusieurs fonctions de cette API utilisent des paramètres d'entré et de
sortie de type char* (pointeur sur une chaîne) et char** (pointeur sur un
pointeur de chaîne ?) et je ne sais pas traduire correctement ces 2 types
en
déclaration VB.

Exemples : const char* API_getVersion(void);
int API_initialize(const char* Version, char**
Description);

Le paramètre char** Description est en sortie.

J'ai déclaré ces 2 fonctions sous VB comme suit :

private declare function API_getVersion LIB "API_Lib" () as string
private declare function API_initialize LIB "API_Lib" (byval Version as
string, Ptr as long ) as long

et je les utilise comme suit :

private sub ......
Dim Version as string
Dim Ptr as long
Dim Result as long

Version = API_getVersion
Result = API_initialize(Version,Ptr)
end sub

L'instruction Version = API_getVersion fonctionne bien sauf que je suis
obligé de rechercher le null binaire pour calculer la longueur de la
chaîne
renvoyée par l'API.

La deuxième instruction ne fonctionne pas et VB me renvoie le message
"Convention d'appel de DLL incorrecte".

Pouvez-vous m'aider ?

Merci d'avance, Jean


Avatar
jean-marc
Hello,

tu peux aussi consulter ceci qui te donnera toutes les informations:
http://rp.developpez.com/vb/tutoriels/dll/

--
Jean-marc



"Patrice Henrio" wrote in message
news:O3Tfo1K$
Je n'ai pas vérifié mais je crois que l'on ne peut pas passer une string


par
valeur dans une API, essaie ByRef au lieu de ByVal.



"jean saint jalmes" a écrit


dans
le message de news:
> Bonjour,
>
> Dans une application VB6.0, je dois utiliser les services d'une API


écrite
> en C.
>
> Plusieurs fonctions de cette API utilisent des paramètres d'entré et de
> sortie de type char* (pointeur sur une chaîne) et char** (pointeur sur


un
> pointeur de chaîne ?) et je ne sais pas traduire correctement ces 2


types
> en
> déclaration VB.
>
> Exemples : const char* API_getVersion(void);
> int API_initialize(const char* Version, char**
> Description);
>
> Le paramètre char** Description est en sortie.
>
> J'ai déclaré ces 2 fonctions sous VB comme suit :
>
> private declare function API_getVersion LIB "API_Lib" () as string
> private declare function API_initialize LIB "API_Lib" (byval Version as
> string, Ptr as long ) as long
>
> et je les utilise comme suit :
>
> private sub ......
> Dim Version as string
> Dim Ptr as long
> Dim Result as long
>
> Version = API_getVersion
> Result = API_initialize(Version,Ptr)
> end sub
>
> L'instruction Version = API_getVersion fonctionne bien sauf que je suis
> obligé de rechercher le null binaire pour calculer la longueur de la
> chaîne
> renvoyée par l'API.
>
> La deuxième instruction ne fonctionne pas et VB me renvoie le message
> "Convention d'appel de DLL incorrecte".
>
> Pouvez-vous m'aider ?
>
> Merci d'avance, Jean