Utilisation d'une DLL C++ en VB

Utilisation d'une DLL C++ en VB - VB/VBA/VBS - Programmation

Marsh Posté le 12-07-2004 à 14:37:35    

Bonjour,
 
J'ai recupere un source d'encodage en Base64 afin d'en faire une dll.
Le probleme est que lorsque j'appelle une des fonctions, VB plante
le proto de la fonction C++ est :

Code :
  1. string __stdcall Base64Encode(const string &Data);


 
Voici "l'extraction" en VB :

Code :
  1. Public Declare Function Base64Encode Lib "Base64.dll" (Data As String) As String

(meme avec ByVal)
 
et l'appel :

Code :
  1. Dim Retour as String
  2. Retour = Base64Encode("ceci est un test" )


 
Auriez vous une idee d'ou cela pourrait venir svp ??
 
Merci

Reply

Marsh Posté le 12-07-2004 à 14:37:35   

Reply

Marsh Posté le 12-07-2004 à 14:42:41    

essaye ça :

Code :
  1. Dim Retour as String
  2. Retour = String(255, vbNullChar)
  3. Retour = Base64Encode("ceci est un test" )


Reply

Marsh Posté le 12-07-2004 à 14:50:30    

Merci pour ta reponse
La declaration de la fonction est bonne ? le parametre aussi ?
VB plante pareil, meme en rajoutant

Code :
  1. Retour = String(255, vbNullChar)


Message édité par actsyst le 12-07-2004 à 14:50:53
Reply

Marsh Posté le 12-07-2004 à 14:55:30    

Oulà oui j'avais pas vu, essaye avec ca :

Code :
  1. char __stdcall Base64Encode(char* Data);


Code :
  1. Public Declare Function Base64Encode Lib "Base64.dll" (ByVal Data As String) As String


 

Reply

Marsh Posté le 12-07-2004 à 14:59:55    

Si je mets char *, ca ne marchera pas car le reste de la fonction utilise les fonctions propres au string

Reply

Marsh Posté le 12-07-2004 à 15:01:58    

Alors dans ce cas là je ne peux plus t'aider ...
Quand j'ai du faire une dll je me suis aidé de ce tutorial, il pourra peut être t'aider ;
www.laboratoire-microsoft.org/articles/dev/dll/1

Reply

Marsh Posté le 12-07-2004 à 15:03:21    

J'ai utilisé le meme tutorial pour apprendre comment faire une DLL :D
Merci pour ton aide

Reply

Marsh Posté le 12-07-2004 à 17:28:27    

moi j'ai voulu faire pareil que toi actsyst. Mais les string n'ont pas d'équivalence en visual basic. En tout cas c'est bcp trop compliqué pour moi. Donc j'ai passé en paramètres des char * et pour repasser en string dans mon programme en c++, je fais :  

Code :
  1. const char * __stdcall Fonction(const char * param){
  2. string sparam = param;
  3. // le reste en prenant sparam à la place de param, sparam étant une string
  4. }


 
Cette méthode marche très bien mais j'ai encore un problème.
Quand je passe une string en paramètre de ma fonction lors de l'appel dans visual basic, mon programme c++ reconnait très bien les caractères et m'affiche tout correctement. Par contre la string de réponse renvoyée sous forme char * à mon programme en visual basic m'affiche des caractères qui n'ont rien à voir. Rien ne plante mais le message retourné par mon programme en c++ fait n'importe quoi... Le code en c++ est bon et celui en visual basic aussi. Le problème vient de la compatibilité... Mais c'est bizarre que ca marche dans un sens et pas dans l'autre...  
 
Please help

Reply

Marsh Posté le 12-07-2004 à 19:15:54    

Merci pour l'info, je v essayer ton astuce
g pas compris le commentaire que tu as mis (le reste en prenant sparam à la place de param, sparam étant une string)
quand j'aurais essaye (cad demain), je te dirais si g trouve qqc
 
++

Reply

Marsh Posté le 13-07-2004 à 09:42:27    

C'était juste pour dire que le reste du corps de la fonction, tu l'écris en utilisant sparam en tant que string... c'était juste ça :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed