[DLL] Utiliser une dll créer par VC6.0

Résolu
phantom_2005 Messages postés 184 Date d'inscription mercredi 8 décembre 2004 Statut Membre Dernière intervention 1 septembre 2010 - 7 mai 2010 à 10:15
phantom_2005 Messages postés 184 Date d'inscription mercredi 8 décembre 2004 Statut Membre Dernière intervention 1 septembre 2010 - 7 mai 2010 à 15:34
Bonjour à tous,

Voila mon problème:
j'ai créé une dll avec Visual C++ 6.0 (MyDll.dll) contenant deux classes 'MyClass1' et 'MyClass2' exportées par _declspec(dllexport).
L'exportation de ces classes fonctionne très bien car je les utilise dans un autre programme (également créé en VC6.0) en incluant le .lib et le .h de la dll.

Ma question est :
En C#, comment puis-je retrouver le même comportement qu'en C++?
C'est à dire utiliser les classes exportées 'MyClass' et 'MyClass2' de la même manière que sous Visual C++ 6.0.


Merci d'avance pour vos réponses.


--------------------------------------------------------------------------------
Phantom_2005
<font color="#0000

5 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
7 mai 2010 à 15:15
Tu crées une fonction C++ qui renvoie le pointeur de ta classe vers C#.

// C++
EXTERN_C DLLEXPORT void GetMyClass( MyClass** ppMyClass );

// C#
[ DllImport( DLL_NAME ) ]
private static extern void GetMyClass( out IntPtr ppMyClass );

// EntryPoint est le nom décoré.
[ DllImport( DLL_NAME, CallingConvention =
CallingConvention.ThisCall, EntryPoint = "..." ) ]
private static extern void GetValue( IntPtr pMyClass , out float pfValue );
3
phantom_2005 Messages postés 184 Date d'inscription mercredi 8 décembre 2004 Statut Membre Dernière intervention 1 septembre 2010 1
7 mai 2010 à 11:53
J'ai bien trouvé quelque chose pour exporter et utiliser des fonctions mais dans ma dll, j'exporte des classes.

Je ne sais pas vraiment comment m'en sortir...


--------------------------------------------------------------------------------
Phantom_2005
<font color="#0000
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
7 mai 2010 à 14:51
Salut, pour exporter les méthodes, tu dois marquer ta classe comme exportée coté C++ (ce qui est déja fait si je comprends bien) et utiliser l'attribut CallingConvention.ThisCall avec DllImport coté C# et la premier paramètre doit être le pointeur "this".

Exporter la classe ce n'est pas possible mais tu peux passer un pointeur vers C#.
0
phantom_2005 Messages postés 184 Date d'inscription mercredi 8 décembre 2004 Statut Membre Dernière intervention 1 septembre 2010 1
7 mai 2010 à 14:58
Merci pour ta réponse Lutinore!

Qu'entends-tu par passer un pointeur vers c#?

--------------------------------------------------------------------------------
Phantom_2005
0

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

Posez votre question
phantom_2005 Messages postés 184 Date d'inscription mercredi 8 décembre 2004 Statut Membre Dernière intervention 1 septembre 2010 1
7 mai 2010 à 15:34
Merci Lutinore,

je vais expérimenter ta solution.

J'ai également trouvé cet article qui me semble très bien...


--------------------------------------------------------------------------------
Phantom_2005
0
Rejoignez-nous