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.
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".
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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
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" <jeansaintjalmes@discussions.microsoft.com> a écrit dans
le message de news: 21F491CD-809D-41D9-8F7E-A8CFBA3C9EA0@microsoft.com...
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.
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".
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.
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".
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
Hello,
tu peux aussi consulter ceci qui te donnera toutes les informations:
http://rp.developpez.com/vb/tutoriels/dll/
--
Jean-marc
"Patrice Henrio" <patrice.henrio@laposte.net> wrote in message
news:O3Tfo1K$FHA.140@TK2MSFTNGP12.phx.gbl...
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" <jeansaintjalmes@discussions.microsoft.com> a écrit
dans
le message de news: 21F491CD-809D-41D9-8F7E-A8CFBA3C9EA0@microsoft.com...
> 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
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