2008-11-10 10 views
6

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

+0

¿C++ regular o C++ administrado? –

Respuesta

6

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 está basada en COM, puede crear cualquier objeto gestionado. El proceso no es difícil, ya que algunas llamadas a API encapsulan muchas funcionalidades. Hay mucha información en línea, por ejemplo, la documentación de MSDN en "Hosting the Common Language Runtime".

1

Puede decidir archivo por archivo en su proyecto C++ si usa C++ administrado o no . 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#.

El cruce del borde C++/C# tiene un costo, por lo que debe analizar dónde hacerlo. Al igual, no querrías hacerlo dentro de un bucle.

3

Hay una manera algo "indocumentada" de exportar API de estilo C de una clase/método .NET.

Esto en última instancia conduce a una situación en la que .NET dll ha exportado API que se pueden llamar desde C/C++ o cualquier cosa que pueda consumir .DLL para el caso.

Si usted está en la "lectura" (Beh;) usted puede conseguir un libro titulado: Inside Microsoft® .NET IL Assembler donde encontrará esta técnica en el capítulo 15: "Métodos gestiona como exportaciones no administrados"

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

1

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

Cuestiones relacionadas