gaga38
Messages postés46Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention27 août 2009
-
18 mai 2009 à 14:38
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 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 ?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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.