Me pregunto cuál es la forma de llamar a un método de clase C# desde C++ (código nativo, no CLI de C++)? Necesita una forma simple y elegantecómo llamar a C# desde C++
Respuesta
Convierta su ensamblaje C# en uno COM visible y use las interfaces COM. Esa es la única manera de hacerlo funcionar al lado del IPC hecho por mí mismo hasta donde yo sé. El problema proviene del entorno .NET bajo el cual debe ejecutarse el ensamblado .NET y C++ se ejecuta en su entorno C++ nativo.
La única forma de comunicarse es mediante un mecanismo IPC (sockets, ...) o utilice COM, ya que los procesos tienen que estar "desacoplados".
Aquí hay un tutorial para la solución basada en COM:
Sasha Goldshtein es el hombre para estas cosas:
hay de nuevo varias maneras de hacerlo: 1. Invierte P/Invoke (tiene que comenzar desde el delegado .NET pasado como devolución de llamada, por lo que esto solo es bueno si la "acción" comienza en su código .NET); 2. Interoperabilidad COM (toda clase .NET también puede ser un objeto COM, con o sin interfaces explícitas); 3. Clases de contenedor C++/CLI.
Ver http://blogs.microsoft.co.il/blogs/sasha/archive/2008/02/16/net-to-c-bridge.aspx
Ver también:
http://www.gregcons.com/KateBlog/CallingManagedCodeFromNativeCode.aspx
puede incrustar cualquier ensamblado CLR (C#, VB.NET, C#, ...) en un programa nativo C++ utilizando lo que se llama "CLR Hosting ". Así es como los programas nativos (como SQL Server) son compatibles con las extensiones de código .NET. P.ej. SQL CLR en SQL Server.
Se carga el CLR en un proceso nativo usando CorBindToRuntimeEx()
para .NET 2.0 y .NET 4. CLRCreateInstance()
en
detalles se pueden encontrar en MSDN, o un libro de Jeff Richter CLR via C#.
+1 ¡genial! ¡No sabía de esto! – gideon
la manera más simple es usar C++/CLI. Si no puede usar eso en su código, escriba un contenedor dll y llame a ese dll.
la dirección es incorrecta – user496949
- 1. Llamar a Python desde C++
- 2. ¿Llamar a C/C++ desde Python?
- 3. ¿Cómo llamar a C++ desde Java?
- 4. ¿Cómo llamar a Objective-C desde Javascript?
- 5. Cómo llamar a window.alert ("mensaje"); desde C#?
- 6. Cómo llamar a MSBuild desde C#
- 7. Llamar C# desde C++: cómo pasar nullptr a DateTime?
- 8. ¿Cómo puedo llamar a C++/CLI desde C#?
- 9. Llamar a Python desde Objective-C
- 10. Llamar C++ (C) desde el lenguaje D
- 11. Llamar a un servicio web desde C++
- 12. Llamar a una función MATLAB desde C#
- 13. Llamar a C# dll desde Delphi
- 14. Llamar a cualquier método Java desde C#
- 15. ¿Llamar a C# desde C++ nativo, sin/clr o COM?
- 16. Llamar código fortran desde C#
- 17. Llamar a las funciones de C++ exe desde C#
- 18. Llamar .NET/C# desde R
- 19. ¿Cómo llamar código Java desde C#?
- 20. Cómo llamar a la funcionalidad C++ desde java
- 21. Cómo puedo llamar a las funciones de C++ desde ruby
- 22. ¿Cómo puedo llamar a notepad.exe desde un programa C?
- 23. Cómo llamar a la función javascript desde C#
- 24. Cómo llamar a las funciones de Matlab desde C++
- 25. Cómo llamar a la función DLL de C# desde VBScript
- 26. llamar a código C++ de c
- 27. Cómo prohibir llamar a un método C#
- 28. Llamar código python (archivos .py) desde C#
- 29. Llamar a un COM + ServicedComponent remoto desde un cliente C#
- 30. Llamar a la biblioteca Java desde Objective C en Mac
Tan bueno como puede ser, el pensamiento duele –
posible duplicado de [Llamar código C# de C++] (http://stackoverflow.com/questions/778590/calling-c-sharp-code-from-c) – cdiggins