Cómo llamar a funciones de C# de C++ no administradollamada C# administrado funciones de C++ no administrado
Respuesta
RE: Cómo llamar a código administrado C# desde una aplicación C++ no administrado?
Calling administrado de .NET C# objetos COM no administrado de código C++ ...
http://www.codeproject.com/KB/cs/ManagedCOM.aspx
Envolver una C# DLL administrada en un proyecto C++ no administrado: DLL.
http://www.experts-exchange.com/Programming/Languages/.NET/Q_22006727.html
Seguí el segundo enlace que me proporcionó y compilé con éxito el archivo cpp pero no pudo ejecutarlo. Está fallando en CreateInstance() usando smartpointer ..... por lo que iam no puede llamar a funciones de C# dll – user186246
Por favor, publique aquí una solución o al menos un resumen de la misma. El enlace puede romperse en el futuro. Y también es más fácil leer todas las soluciones aquí. Si son más de uno, puede publicarlos como respuestas múltiples. ¡Gracias! ;) – bluish
O utilizar un project of mine que permite C# para crear las exportaciones no administrados. Esos pueden ser consumidos como si estuvieran escritos en un idioma nativo.
Hola, esto se ve muy interesante. ¿Tiene una versión para VS 2010, o puede indicarme qué cambios hacer para que esté disponible para VS 2010/Net 4? Gracias – bzamfir
Debería funcionar bien (lo uso en 2010), pero tal vez quiera cambiar el marco de destino del proyecto recién creado a 4.0. VS 2010 se establece de manera predeterminada en .Net 2.0 cuando no está presente ninguna configuración de marco de destino. –
Gracias, genial. Vi eso (creé un proyecto vacío de prueba de muestra, pero no se probó si funciona todavía) – bzamfir
Primero usé COM interoperabilidad, pero ahora cambié a IJW (simplemente funciona), ya que es mucho más simple. Tengo un contenedor C++/CLR DLL (compilar con/clr).
Un ejemplo sencillo (usando la estática para hacer las llamadas más fácil):
namespace MyClasses
{
public class MyClass
{
public static void DoSomething()
{
MessageBox.Show("Hello World");
}
}
}
En la DLL que puedo hacer referencia a los espacios de nombres de la siguiente manera:
using namespace MyClasses;
y llamarlo:
__declspec(dllexport) void CallManagedCode()
{
MyClass::DoSomething();
}
Ahora tiene una exportación de DLL no administrada "CallManagedCode" que llama al código administrado.
Por supuesto, también tiene que convertir datos entre el límite gestionado/no gestionado. A partir de VS2008, Microsoft incluye un Marshal-helper para convertir entre tipos administrados y no administrados. Ver http://msdn.microsoft.com/en-us/library/bb384865.aspx
Realmente no tiene que ir por esa ruta manualmente. Mira el enlace en mi respuesta. Es completamente posible tener la contraparte de DllImport en C#, incluyendo toda la bondad de clasificación que viene con .Net. Mi tarea MSBuild agrega las correcciones de vt apropiadas después de la compilación y no necesita implementar otro ensamblado ... –
Lo probé: el archivo DLL tiene las exportaciones. Sin embargo, ¿cómo se supone que debo usarlo? No encontré una .lib que me permita vincularme con la DLL. –
No uso C++, pero supongo que no es diferente de como lo haría con cualquier biblioteca que no incluya encabezados C/C++: escriba el encabezado de las funciones que quiere importar usted mismo. Como dije, no uso C++. Es bastante sencillo de C o Delphi. –
Utilicé las clases de contenedor C++/CLI described here y fue relativamente fácil de implementar.
Por favor, publique aquí una solución o al menos un resumen de la misma. El enlace puede romperse en el futuro. Y también es más fácil leer todas las soluciones aquí. Si son más de uno, puede publicarlos como respuestas múltiples. ¡Gracias! ;) – bluish
- 1. Token no resuelto C++ administrado
- 2. Manejo de errores al usar código no administrado en uno administrado (C++, C, C++/CLI, C#)
- 3. Incrustar dll no administrado en un C# dll administrado
- 4. C++/cli pass (administrado) delegado al código no administrado
- 5. Rendimiento de la Llamada .dll no administrado desde C#
- 6. Anular la llamada a DLL no administrado
- 7. depurando el código de C# administrado y el código de C++ no administrado en una solución
- 8. Rendimiento de invocar código no administrado desde el código administrado
- 9. C++/CLI: prevención de la recolección de basura en el contenedor administrado del recurso no administrado
- 10. ¿Cómo usar el código administrado del código no administrado?
- 11. Diferencia entre C++ administrado y C++
- 12. C# 's lock() en C++ administrado
- 13. llamar código de C++ no administrado desde C# usando pinvoke
- 14. que vuelven punteros de no administrado a código administrado
- 15. Uso del código no administrado del código administrado
- 16. Memoria c-code no administrada gratuita en C administrado
- 17. Crear un objeto C++ no administrado en C#
- 18. Pasando cadena C# a C++ DLL no administrado
- 19. wglCreateContext en C# falla pero no en C++ administrado
- 20. XLL complemento de Excel en C++ no administrado
- 21. llamando al código administrado desde el código no administrado
- 22. Inicialización de la matriz en C++ administrado
- 23. C++ administrado tamaño de la matriz
- 24. Administrado C++ para formar un puente entre C# y C++
- 25. C# código no verificable sin permiso no administrado
- 26. No puede depurar no administrado DLL desde C#
- 27. Análisis de métricas de código para código C++ no administrado
- 28. Uso de dll de C++ administrado desde C#
- 29. Utilizando métodos de extensión C# de C++/CLI administrado
- 30. Analizador de código estático: no administrado C++ Visual Studio 2008
ver http://stackoverflow.com/questions/1802929/how-can-we-use-net-dll-in-vc/1802952#1802952 – Henrik