Passage de chaines de caractères en paramètre d'une DLL C vers VB

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 - 6 sept. 2004 à 18:48
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Derniè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 ;)

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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));

ciao...
BruNews, Admin CS, MVP VC++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 sept. 2004 à 19:13
Precision:
si psz est une alloc dynamique ne pas oublier de liberer apres avoir fait le SysAllocStringByteLen().

ciao...
BruNews, Admin CS, MVP VC++
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
7 sept. 2004 à 09:39
Merci beaucoup BruNews

Je teste ça tout de suite ...
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
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) )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
7 sept. 2004 à 11:06
oups ! ^^
y'a eu un souci dans le smiley !
ct normalement celui ci :
" :approve) D'accord "
... la honte sur moi ... :blush)
0
Rejoignez-nous