web-dev-qa-db-fra.com

Utilisation de la classe C ++ DLL dans l'application C #

J'ai un C++ non managé DLL qui exporte simplement une seule classe (pas COM ... c'est juste une simple classe C++) comme interface. Je veux utiliser cette classe en C # mais on me dit que il ne peut pas simplement être importé en C #.

Quelle est la bonne façon d'utiliser cette classe dans mon application C #?

46
cjserio

DllImport est votre meilleur pari. Il y a un peu de massage de type de données, surtout si vous passez des structures, mais vous pouvez presque tout faire avec.

3
Steve

Vous avez besoin d'un intermédiaire proxy (modèle GoF) pour combler la frontière gérée/non gérée.

Deux options:

  • Un wrapper C++/CLI
  • Un wrapper COM.

Le premier sera plus direct, et le second comporte deux étapes C++ pur -> COM -> .NET.

2
Richard

Parfois, il est plus facile de fournir votre propre interface C. SWIG n'est pas anodin à configurer. J'ai utilisé C++ géré et C++/CLI et ils vont bien. Le plus simple était juste de faire un wrapper C (et peut être utilisé par n'importe quel autre langage car la plupart ont un moyen d'appeler une fonction C).

2
chrish