Passage de chaines de caractères en paramètre d'une DLL C vers VB
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 2013
-
6 sept. 2004 à 18:48
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 2013
-
7 sept. 2004 à 11:06
Salut tous les coders,
soyons brefs, soyons concis.
ma fonction :
extern "C" void __stdcall
MakeLineEx(const char* folder,char* file,char* sout);
- folder n'est jamais modifié,
- file va être modifié d'un caractères,
- sout est la chaine de sortie
Maintenant, pour VB:
Public Declare Sub _
TestEx _
Lib "MaDll.dll" (ByVal folder As String,ByRef file As String,ByRef sout as String)
Voilà le dernier test que j'ai fais. Toutefois j'ai essayer bon nombre de possibilité sans résultat. Celle ci me fait planter l'appli VB. Je pense que BruNews connais le pb (d'ailleurs je risque de me faire engueuler :D )
Si toutefois vous savez où est le pb merci d'avance de votre réponse. Si vous connaissez des sources ou posts sur ce sujet précis merci aussi de me les indiquer.
enfin, pour que ce sujet serve à plus de gens, il serait intéressant de donner un exemple avec par exemple un fonction exporté de type :
concatene(char* s1,char* s2,char* sout)
(en tout cas moi ça me dirais bien ^^)
voila tout.
j'aimerais remercié pour finir toutes les personnes de cppfrance et vbfrance qui nous ont fournis un magnifique outils d'information et des réponses à des questions qui hantaient nos nuit ;)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 6 sept. 2004 à 19:10
Tes parametres C ne sont pas bons, pour coincider avec ce que tu declares depuis vb, il te faudra:
MakeLineEx(const char* folder, BSTR *file, BSTR *sout);
- Tu stockes ce qu'on te passe par les BSTRs dans un buffer interne a ta fonction.
- Tu desalloues les chaines VB ex: SysFreeString(*file);
- Quand finis ton algo et que tu as construis ton tableau (char* psz) resultant alors tu refiles ainsi a vb:
*file = SysAllocStringByteLen(psz, strlen(psz));
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 7 sept. 2004 à 11:03
Ayé je viens de tester et ça marche !!!
Alors re-merci BruNews. D'avoir pris du temps pour me répondre, d'avoir été aussi précis (jusqu'à me rappeler de désalouer :) ), et de ne pas m'avoir engueuler parce qu'il existait d'autres sujets discutant du même point (mais avec lesquels je n'étais pas arriver à un résultat).
JoPoP (Membre du fan club "BruNews Supasta" :dissapprove) )
Vous n’avez pas trouvé la réponse que vous recherchez ?