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

Signaler
Messages postés
46
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
27 août 2009
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
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

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
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));
}
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
VB joue avec des BSTR, pas avec des char*
Messages postés
46
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
27 août 2009

OK Merci beaucoup je vais essayer

Petit à petit l'oiseau fait son nid
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
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.