Encapsuler une DLL C++

alain8550 Messages postés 1 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 2 février 2010 - 2 févr. 2010 à 01:50
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 2 févr. 2010 à 18:10
Bonjour,



J’ai une DLL écrite en VC++ par une tierce compagnie à laquelle je dois accéder en VB.Net ou C#. Je n’ai évidemment pas accès au code source mais j’ai le fichier .h et .lib de ce DLL.



Selon moi j’ai deux possibilités pour arriver à mon objectif : soit tenter d’accéder directement à la DLL en utilisant DLLImport (ou autre méthode) ou écrire un wrapper en C++ pour que ce wrapper soit visible par Dot Net. J’ai tenté les deux et je n’ai pas eu de bons résultats. Ma question : quelle est, selon vous, la meilleure façon à utiliser pour accéder à la DLL via Dot Net? Mes connaissances en C++ sont plutôt basique je veux donc savoir ou concentrer mes recherches.



Merci de vos suggestions.

2 réponses

fregolo52 Messages postés 1115 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 3
2 févr. 2010 à 08:08
Salut,

Il me semble que tout le monde utilise DLLImport pour accéder au API Win32.
Pour avoir des réponses plus pertinantes, je te conseille plutot les forums .NET (C# ou VB, pas C++) où tu trouveras surement des tutoriels ou exemples de code.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 42
2 févr. 2010 à 18:10
Salut, si la DLL contient uniquement des fonctions, un simple DllImport suffit, il est possible d'accéder aux methodes d'une classe avec la convention d'appel ThisCall mais pour ça la classe doit être marquée comme exportée coté C++.

Niveau performance entre un wrapper C++/CLI et DllImport c'est quasiment la même chose, tout dépend si les types sont correctement marshallés entre le code managé et non managé, il faut utiliser un maximum de types blittables, c'est à dire des types qui ont la même représentation mémoire en C++ et en C# ce qui évite au runtime de faire tout un tas de copies inutiles.
0