2010-04-21 9 views
5

Necesito acceder al código en una DLL C++ nativa en algún código C# pero estoy teniendo problemas para calcular la clasificación. He hecho esto antes con un código que era directo C, pero parece haber encontrado que no es directamente posible con las clases de C++. Hecho aún más complicado por el hecho de que muchas de las clases contienen funciones virtuales o en línea. Incluso traté de pasar los encabezados a través del PInvoke Interop Assistant, pero se ahogó en casi todo y no realmente qué hacer ... Supongo que porque no es realmente compatible.Marshal una clase C++ a C#

Entonces, ¿cómo, si es posible, puede utilizar una DLL nativa de clase C++ del código .NET. Si tengo que usar algún intermediario (CLR C++?) Está bien.

Respuesta

9

Realmente no hay una manera fácil de hacer esto en C# - Yo recomendaría hacer una capa contenedora simple en C++/CLI que exponga las clases de C++ como clases .NET.

It is possible to use P/Invoke and lots of cleverness to call C++ virtual methods, pero no seguiría esta ruta a menos que realmente no tuviera otra opción.

+0

Muy buena respuesta. Mejor que resolver estrictamente la pregunta ("¿Cómo ordenar ...?") Es resolver la * necesidad * real del OP. – pyon

0

Puede echarle un vistazo a SWIG, si nada más para ver cómo manejan el código del contenedor básico (que genera SWIG). No sé casi nada sobre los enlaces de código nativo de C#, por lo que no puedo juzgar si su enfoque es sólido, pero hacen un trabajo decente con algunas de las otras combinaciones de idiomas.

Cuestiones relacionadas