LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Appel de dll VB 6.0 avec LabVIEW

Bonjour,

J'ai créé une dll de test avec VB6.0 (une vrai dll, pas une dll ActiveX) que j'arrive à appeler avec un autre prog VB mais pas avec LV.

Le message est le suivant :
LabVIEW : Une exception a eu lieu dans le code externe appelé par une fonction d'appel de DLL. Ceci peut avoir corrompu la méloire de LabVIEW. Enregistrer tout travail en cours dans un nouvel endroit et redémarrez LabVIEW.

Le VI "test_utilisation_dll.vi" s'est arrêté au niveau de Appeler une fonction d'une DLL 0xC44 du sous-VI "test_utilisation_dll.vi"


Je pense qu'il s'agit d'une histoire de convention d'appel mais j'ai un peu tout essayé. A quoi correspond ce code d'erreur hexa ?
Que dois-je utiliser :
Convention C ou StdCall(WINAPI) ?
Passage par valeur ou pointeur ?
format de string : C, pascal, Handle ?

La fonction VB est la suivante :
function_chaine(chaine_in as string) as string
Elle est sensé retourner une chaine qui est la concaténation de la string en paramètre avec elle même.

J'ai le même problème avec une deuxième fonction de la DLL qui est la suivante :
function_numérique(num_in as double) as double
Elle est sensé retourner un nombre qui est le double du nombre entré en paramètre

Enfin, est t'il possible de faire appel à une fonction dans une dll qui retourne un tableau ? Quand on déclare une fonction d'une dll dans LV, on a uniqueent le choix entre numérique, chaîne et void pour type le retour...

Merci de votre aide,

Benjamin

0 Kudos
Message 1 of 3
(3,501 Views)
Je suis toujours bloqué, pouvez vous m'aider, merci.
0 Kudos
Message 2 of 3
(3,469 Views)


@benj wrote:
Bonjour,

J'ai créé une dll de test avec VB6.0 (une vrai dll, pas une dll ActiveX) que j'arrive à appeler avec un autre prog VB mais pas avec LV.

Le message est le suivant :
LabVIEW : Une exception a eu lieu dans le code externe appelé par une fonction d'appel de DLL. Ceci peut avoir corrompu la méloire de LabVIEW. Enregistrer tout travail en cours dans un nouvel endroit et redémarrez LabVIEW.

Le VI "test_utilisation_dll.vi" s'est arrêté au niveau de Appeler une fonction d'une DLL 0xC44 du sous-VI "test_utilisation_dll.vi"


Je pense qu'il s'agit d'une histoire de convention d'appel mais j'ai un peu tout essayé. A quoi correspond ce code d'erreur hexa ?
Que dois-je utiliser :
Convention C ou StdCall(WINAPI) ?
Passage par valeur ou pointeur ?
format de string : C, pascal, Handle ?

La fonction VB est la suivante :
function_chaine(chaine_in as string) as string
Elle est sensé retourner une chaine qui est la concaténation de la string en paramètre avec elle même.

J'ai le même problème avec une deuxième fonction de la DLL qui est la suivante :
function_numérique(num_in as double) as double
Elle est sensé retourner un nombre qui est le double du nombre entré en paramètre

Enfin, est t'il possible de faire appel à une fonction dans une dll qui retourne un tableau ? Quand on déclare une fonction d'une dll dans LV, on a uniqueent le choix entre numérique, chaîne et void pour type le retour...

Merci de votre aide,

Benjamin



Calling convention: most likely stdcall

String could be tricky. I'm not familiar with VB at all. VB does use quite special datatypes such as BSTR and in newer versions often Unicode strings. This are things LabVIEW won't be able to support directly. You should be able to tell VB in some ways to use C strings for string parameters. It can do so when importing from system libraries too.

Passing by value or reference will depend on the type of the parameter. If it is an input skalar it's going to be by value. If it is a skalar that is returned to the caller then it is by reference. Not sure if VB calls this BYVAL and BYREF or something like that.

It seems you need to make sure to tell VB that string parameters are passed ByRef too to be treated like C variables.

So in your above exampels the furst function returns a C string pointer and takes a C string pointer. Make sure to pass in a string that contains enough characters for the function to fill in whatever it needs. C string pointers need always be allocated by the caller (here LabVIEW).

The second function returns a double numeric and takes a double numeric as parameter passed by value.

And no there is no way to return a table as function return value. You could pass it as parameter but I have no idea how a VB table would look like in memory.

Rolf Kalbermatter
Rolf Kalbermatter  My Blog
DEMO, Electronic and Mechanical Support department, room 36.LB00.390
0 Kudos
Message 3 of 3
(3,466 Views)