2009-08-22 23 views
7

Esta pregunta se ha formulado antes, pero nunca encontré una solución realmente satisfactoria:¿Llamar a C# desde C++ nativo, sin/clr o COM?

Tengo una biblioteca de clases escrita en C#, y quiero llamarla desde una aplicación heredada nativa de C++. La aplicación de host es verdaderamente nativa, compilada en Windows & Linux, es una aplicación de consola. Entonces, ¿cómo puedo hacer que llame a la biblioteca de la clase C#, suponiendo que use Microsoft .NET en Windows y Mono en Linux.

He examinado SWIG y el ajuste con las interfaces COM en Windows, pero ¿hay una solución estándar reconocida que funcione en varias plataformas? es decir, que es genérico, funciona tanto con Microsoft .NET como con Mono, una aplicación de escritura única en todas partes.

Las soluciones deben exponer las interfaces de clase completa desde el dominio C# al dominio C++.

preguntas similares se centran sólo en las soluciones de Windows, por ejemplo -

Call C# methods from C++ without using COM

+0

Tendría que preguntarle a los chicos mono si, y cómo, han exportado eso. –

Respuesta

5

Si quieres hacer esto multiplataforma, recomendaría ir con un enfoque Mono 100%.

Mono tiene un Embedding API limpio que funciona en Linux y Windows.

+0

Una buena respuesta, incrustando Mono en Windows no es realmente lo que estaba buscando y todo parece muy manual. Tendría que escribir mucho código de placa de caldera para exponer una interfaz completa a una biblioteca, parece que consume mucho tiempo y es frágil, me recuerda a JNI. Me preguntaba si hay algún tipo de forma automatizada, como SWIG o simplemente exponiendo una interfaz COM. – titanae

+0

COM funciona bien, pero no tan bien en Linux. SWIG solo sirve para ir por el otro lado ... Lo siento. –