Utiliser une classe C++ en VB.NET

svallee Messages postés 10 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 6 mars 2009 - 9 sept. 2008 à 10:23
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 9 sept. 2008 à 14:19
Bonjour,

On m'a fourni une classe C++ que je doit appeller dans un programme en VB.NET. J'ai trouvé comment appeller des fonctions C++ en VB.NET mais une classe ! est-ce possible ?
Merci d'avance

2 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 sept. 2008 à 12:16
Tu arrrives à compiler du C++ chez VB ???

ciao...
BruNews, MVP VC++
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
9 sept. 2008 à 14:19
Salut,

Autant prévenir, toutes mes solutions sont plus ou moins pourris.
La solution 3 est probablement la plus facile, bien que ça dépende de ce que tu dois faire avec ta classe (Une instance où plusieurs instances... Si plusieurs, il faudrat passer par un tableau...). La première est longue et complexe à mettre en oeuvre. La 2, je n'en ai aucune idée.

## Solution 1 :

En C++, on peut faire des classes COM et les stocker dans une dll. Le VB.NET est à peu près compatible avec la techno COM, et peut utiliser les classes COM définies dans une dll, moyennant quelques cliques à droite et à gauche dans Visual Studio.

Par contre, ce n'est pas évident de faire des classes COM en C++ (cf mon lien un peu plus haut pour avoir plus d'infos).

## Solution 2 :

Tu dois aussi pouvoir t'arranger pour faire du C++/CLI, et compiler ta classe dans un assembly .NET. Tu pourras facilement utiliser cette classe dans ton VB.NET. Je n'ai aucune idée de comment s'y prendre et de ce que doit respecter une classe C++ pour être compilable en .NET.

## Solution 3 :

Mettre ta classe dans une dll classique exportant des fonctions C, qui elles même appellent les fonctions C++ (Avantage, pour se la pêter, on peut appeler ça un wrapper). Au final, ça donne ça :
VB.NET <-> C <-> C++

La doc de wikipedia sur les dlls est pas mal. Côté C++, il faut que tu fasse comme dans cette doc :

extern"C" __declspec(dllexport) int toto()
{
   return monInstanceDeClasse.toto();
}

Côté VB.NET, il faut utiliser declare ou dllimport.

Attention à la convention d'appel.
0
Rejoignez-nous