[VB .NET]Attaquer une DLL C++ et lui passer et récupérer des Strings

Attaquer une DLL C++ et lui passer et récupérer des Strings [VB .NET] - VB/VBA/VBS - Programmation

Marsh Posté le 09-08-2005 à 10:41:38    

Bonjour à tous,
 
Ca fait maintenant quelques jours que j'essaye de résoudre un problème et malgré toute ma bonne volonté :whistle: j'ai toujours pas trouvé...
 
Je voux explique le bazar.
 
Un boite dont je suis client m'a fourni une DLL que je dois mettre en place sur un projet .NET. Cette DLL est dévelopée en C++ et voici la fonction qu'elle contient qui m'intéresse:
 

Code :
  1. void mafonction(
  2. long * param_un,
  3. long param_deux,
  4. unsigned char * param_trois,
  5. unsigned char * param_quatre)


 
Les paramètres 1 et 4 sont des paramètres de sortie et les 2 et 3 sont des entrées.
 
J'ai déjà testé cette fonction de la DLL en C avec le .lib et le .h fourni avec la DLL, tout fonctionne nickel.
 
Pour le VB .NET, je n'arrive pas à avoir de résultats en retour, et je ne sais pas non plus si les entrées lui sont bien passées...
 
Voici la déclaration de la fonction que j'ai faite dans le programme:
 

Code :
  1. Private Declare Sub mafonction Lib "madll" _
  2. (ByVal param_un As Long, _
  3. ByVal param_deux As Long, _
  4. ByVal param_trois As String, _
  5. ByVal param_quatre As String)


 
Avec ensuite un appel en  
 

Code :
  1. Call mafonction(a,b,c,d)


 
J'ai surement fait des erreurs dans la conversion de types, notamment le long * -> Long et j'ai lu quelquepart que les String à passer en paramètre d'une DLL devaient être de taille fixe, ce qui n'est plus possible en VB .NET...
 
Le programme compile mais les résultats ne sont pas au rendez-vous...
 
Je débute complètement dans l'utilisation des DLL, merci d'éclairer ma lanterne si vous en avez la possibilité !

Reply

Marsh Posté le 09-08-2005 à 10:41:38   

Reply

Marsh Posté le 09-08-2005 à 21:07:04    

http://vbfrance.com/code.aspx?id=7093
 
ca pourrait peut être t'aider ?


---------------
now : do nothing
Reply

Marsh Posté le 10-08-2005 à 10:19:10    

Il doit bien y avoir une classe genre Marshal en VB.Net pour convertir tes données "managed" en données "natives" et vice versa.

Reply

Marsh Posté le 10-08-2005 à 13:12:43    

@knakes: bof, je vois pas trop ce qui pourrait m'intéresser là-dedans :p Ca parle surtout d'interfaces graphiques gerées en XML...
 
@theShOcKwAvE: j'ai essayé avec le type StringBuilder, j'obtines le même résultat.
 
Merci quand même de vos idées !


Message édité par Swim le 10-08-2005 à 13:30:00
Reply

Marsh Posté le 10-08-2005 à 14:28:23    

Le plus simple à mon avis c'est de te faire un petit wrapper Managed C++. C'est fait pour ça.
Ca donnerait un truc du genre:

Code :
  1. public __gc class mon_wrapper
  2. {
  3. public:
  4.     void mafonction(
  5.         long & param_un,
  6.         long param_deux,
  7.         System::Byte param_trois __gc [],
  8.         System::Byte param_quatre __gc []);
  9. };


sauf que ça doit plus complexe, ça dépend de comment sont utilisés les arguments.
Regarde du côté de System::Runtime::InteropServices.
http://msdn.microsoft.com/library/ [...] stions.asp


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

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