resueltos resolucion programacion orientada operador objetos metodos ejercicios ejemplos codigo clases ambito c# .net c++ com interop

resolucion - Llame a los métodos de C#de C++ sin usar COM



operador de resolucion de ambito c++ (4)

Existe una forma algo "indocumentada" de exportar API de estilo C desde una clase / método .NET.

En última instancia, esto lleva a una situación en la que un dll de .NET ha exportado API que pueden invocarse desde C / C ++ o cualquier cosa que pueda consumir .DLL en ese caso.

Si le gusta "leer" (beh;) puede obtener un libro llamado: Dentro de Microsoft® .NET IL Assembler, donde encontrará esta técnica en el capítulo 15: "Métodos gestionados como exportaciones no gestionadas".

También hay un buen ejemplo de proyecto en el proyecto de código que puede usar como punto de partida para entornos de 32 bits: http://www.codeproject.com/KB/dotnet/DllExport.aspx

¿Hay alguna manera de crear objetos C # y llamar a métodos desde C ++ no administrado, pero sin usar COM Iterop? Estoy buscando algo como JNI (pero para .Net), donde puedes crear la máquina virtual, crear objetos, etc.


Si está utilizando C ++ / CLI, puede interactuar directamente con el mundo administrado y el código no administrado, por lo que la interoperabilidad es trivial.

También puede alojar CLR usted mismo, y mientras que la API de alojamiento se basa en COM, puede crear cualquier objeto gestionado. El proceso no es difícil, ya que algunas llamadas de API encapsulan muchas funcionalidades. Hay mucha información en línea, por ejemplo, la documentación de MSDN sobre " Hosting Common Language Runtime ".


Puede decidir archivo por archivo en su proyecto C ++ si usa o no C ++ administrado. Intente cambiar la configuración de un archivo en su proyecto para que se compile como administrado. Coloque las llamadas allí a su objeto C #.

Hay un costo al cruzar el borde C ++ / C #, por lo que debe analizar dónde hacerlo. Al igual, no querrías hacerlo dentro de un bucle.


Soy autor de jni4net , puente de intraproceso de código abierto entre JVM y CLR. Se basa en JNI y PInvoke. No se necesita código C / C ++. Espero que te ayude.