Recupération d'une chaine de caractères en VB6 à partir d'une DLL en C

Résolu
gaga38 Messages postés 46 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 27 août 2009 - 18 mai 2009 à 14:38
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 18 mai 2009 à 16:39
Bonjour à tous,

Me revoilà toujours avec des petits soucis de communication entre une DLL faites en C par mes petites mains et mon code VB6.
Tout d'abord, je tiens à préciser que la DLL est bien reconnu par VB6 car le code en C s'execute bien.
Le problème est le suivant, dans VB je fais appel à une fonction que l'on nommera "MaFonction", cette fonction qui est contenu dans une DLL (et qui est en C) va chercher des données en base et me les renvoient avec le type char *, voici les déclarations de mes fonctions dans les 2 langages.

Dans le C :
__declspec( dllexport ) char* __stdcall MaFonction(HWND param1, char *param2, char *param3, char *param4, char *param5);

Dans VB6 :
Declare Function MaFonction Lib "MaLibDLL.dll" (ByVal param1As Long, ByVal param2 As String, ByVal param3 As String, ByVal param4 As String, ByVal param5 As String) As String

Donc, quand je fais appel à la fonction MaFonction dans mon code VB6, le retour est toujours une String vide (""), or en mettant des traces juste avant le "return" dans ma fonction C, je sais que ce que je retourne contient bien quelque chose et pas "".

D'où ma question, comment puis je récupérer mon char * dans VB6 ?

Merci de votre aide

Gaga38

Petit à petit l'oiseau fait son nid

4 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
18 mai 2009 à 15:17
faire, en gros:


DLLTEST_API BSTR fnDllTest(char* In)
{
char sRet[9];
sRet[0] = 'H';
sRet[1] = 'e';
sRet[2] = 'l';
sRet[3] = 'l';
sRet[4] = 'o';
sRet[5] = ' ';
sRet[6] = 'V';
sRet[7] = 'B';
sRet[8] = '\0';

return SysAllocStringByteLen(sRet, strlen(sRet));
}
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
18 mai 2009 à 15:02
VB joue avec des BSTR, pas avec des char*
0
gaga38 Messages postés 46 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 27 août 2009
18 mai 2009 à 16:33
OK Merci beaucoup je vais essayer

Petit à petit l'oiseau fait son nid
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
18 mai 2009 à 16:39
possible de jouer avec un char*...

mais faut l'allouer depuis VB, et le transmettre dans les parametres.
C saura le modifier sur place.

en return, faut un BSTR.


la plupart des APIs windows font ainsi... si elles doivent retourner du texte, on leur transmet un buffer, sa taille (comme ca, pas besoin d'initialiser)

la fonction C remplit, et renvoie la longueur finallement copiée.
0