¿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
Respuesta
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".
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.
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
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.
- 1. Métodos de llamada C del código C++/Java/C#?
- 2. C# Métodos de extensión - devolver llamada objeto
- 3. Métodos de llamada usando nombres en C#
- 4. C# Métodos de llamada en clases genéricas
- 5. Métodos de llamada en orden aleatorio (C#)
- 6. ¿Llamar a C# desde C++ nativo, sin/clr o COM?
- 7. C# Llamada asincrónica sin EndInvoke?
- 8. Función de llamada en C++ dll sin encabezado
- 9. Métodos estáticos sin estado vs. funciones C en Objective-C
- 10. C# exponer a COM - herencia de interfaces
- 11. Biblioteca de C++ de llamada en C#
- 12. C# C++ devolución de llamada de interoperabilidad
- 13. BSTR de clasificación de C++ a C# con interoperabilidad COM
- 14. Manejar eventos C# COM en C++
- 15. Cómo usar COM dll en mi programa C++
- 16. MSMQ COM API en C#
- 17. ¿CreateObject equivalente en C/C++? (COM Interop)
- 18. Com + enlace en tiempo de C# 4.0
- 19. Clase de amigo sin usar en C++
- 20. Métodos de anulación C++
- 21. Usar el objeto COM desde DLL sin registro
- 22. En Objective-C, ¿cuándo debería usar métodos de clase y cuándo debería usar métodos de instancia?
- 23. C# + COM Interop, versión determinística
- 24. Métodos de llamada escritos en C# en Excel 2007 a partir de las fórmulas de celda
- 25. LD_PRELOAD para métodos de clase C++
- 26. métodos virtuales puros C++
- 27. C#: Métodos de empaquetado en otros métodos
- 28. ¿Algún buen tutorial sobre cómo usar COM desde C#?
- 29. C#: ¿Firmas de métodos?
- 30. Visibilidad de clase COM: C# a VB6
¿C++ regular o C++ administrado? –