Tengo una DLL que escribí en C# y quiero usarla tanto con aplicaciones C# como con aplicaciones escritas en VC++ no administrado. es posible?¿Es posible usar una DLL creada usando C# en una aplicación VC++ no administrada?
Respuesta
Para complementar otras respuestas aquí, aquí está el artículo de soporte de MS que describe su situación.
Puede hacer que el conjunto C# sea visible para COM, y úselo de esa manera.
En sus propiedades de proyecto C#, debajo del botón "Información de ensamblaje", seleccione "Hacer que COM esté visible".
Existen numerosas formas de acceder a los objetos COM desde Native C++, la manera más fácil/mejor depende de lo que haga y cómo lo haga.
+1 - que más o menos es la misma. La interoperabilidad COM es prácticamente la única forma sensata en este escenario. – TomTom
-1, sin comentarios. . . ¿cómo puede ser esto? Si hay algo mal con mi respuesta, ¿puedes avisarme por favor? Estamos todos aquí para aprender, gracias. –
Gracias por su respuesta, utilizaré este enfoque. :) –
No es más que un simple interoperabilidad COM, el MSDN FAQ también enumera los métodos menos conocidos:
2.2 Como llamar ensamblado de .NET de Visual C++ nativo?
Hay básicamente cuatro métodos de ensamblado de .NET llamada de VC++ nativo código. Microsoft All-In-One Code Framework tiene ejemplos de trabajo que demuestran los métodos. Módulo
nativo VC++ llama CLR Hosting APIs para alojar CLR, carga y llamada el ensamblado de .NET. (Todo-En-Uno Marco Código Código de ejemplo: CppHostCLR)
Si el ensamblado de .NET puede ser expuesto como un componente COM, módulo nativo VC++ puede llamar en el conjunto de .NET través de NET - COM interoperacion (Marco Code-En-Uno la Muestra : CppCOMClient)
inversa PInvoke: la gestión nativa llamada codificada pasar un delegado el código nativo puede volver a llamar. (Marco Código de ejemplo Código-En-Uno: CSPInvokeDll)
Si se permite que el módulo que contiene VC código nativo ++ para enable CLR, el VC++ nativo código puede llamar NET directamente a través de los “It simplemente funciona ", O" IJW ", mecanismo. (Todo-En-Uno marco Código Código de ejemplo: CppCLIWrapLib)
Bueno, parece que tengo que llevar a mi unmanaged exports nuevo. ;-)
Acabo de responder a similar question Hace 2 días. Esto funciona totalmente en C#, e incluso se crea un archivo .lib .exp & para su montaje # C para ser consumido por C++:
internal class Sample
{
[DllExport("_export_test", CallingConvention.Cdecl)]
static int Test(int a)
{
return a + 1;
}
}
¡GUAU! De Verdad? ¿Asumo que el C# necesita ser marcado como inseguro? No tenía idea de frackin que pudieras hacer esto. –
El ensamblaje contendrá bits inseguros, pero no se considerará inseguro cuando se use como ensamblado .Net. Todavía puede usarlo como ensamblaje ordinario x86 o x64 (no AnyCPU) con todas sus clases y esas cosas. Sin embargo, si lo carga como una DLL real, se comportará como tal. Aquí es donde entra el bit inseguro. –
- 1. Cómo usar C# Dll en vC++?
- 2. ¿Es posible llamar a una DLL administrada desde C++ no administrado?
- 3. Pasando una cadena de C# a una DLL de C no administrada en Windows Mobile
- 4. ¿Cómo puedo implementar una DLL no administrada con una aplicación WPF de hacer clic una vez?
- 5. ¿Cómo obtener la lista de funciones dentro de una DLL (administrada y no administrada)?
- 6. ¿Qué es una DLL no administrada? ¿Qué es un código administrado/no?
- 7. Usando una DLL basada en Qt en una aplicación que no es Qt
- 8. Cómo encontrar una lista de todas las DLL no administradas loadad mediante mi aplicación .net administrada
- 9. ¿Cómo usar una biblioteca C++ en una aplicación C#?
- 10. ¿Es posible construir una DLL en C++ que no tenga dependencias?
- 11. Usando tinyurl.com en una aplicación .Net ... ¿es posible?
- 12. ¿Es posible compartir una declaración enum entre C# y C++ no administrado?
- 13. ¿Cómo puedo pasar un puntero desde C# a una DLL no administrada?
- 14. Fuga no administrada en una aplicación WPF trivial
- 15. ¿Es posible ofuscar una aplicación ClickOnce creada en Visual Studio 2008?
- 16. ¿Es posible usar Java para crear dll?
- 17. Implementación de una matriz genérica no administrada en C#
- 18. ¿Es posible combinar una DLL en un EXE .NET?
- 19. Incrustar dll no administrado en un C# dll administrado
- 20. ¿Es una cadena literal en C++ creada en memoria estática?
- 21. ¿cómo se llama una función administrada (C#) desde C++?
- 22. ¿Hay alguna manera de enganchar una función administrada en C# como si fuera una función no administrada en C++?
- 23. ¿Es posible usar Panda3D dentro de una aplicación wxPython?
- 24. Es posible el desbordamiento/desbordamiento del búfer en la aplicación web asp.net C# completamente administrada
- 25. ¿Por qué una estructura no administrada no puede ser miembro de una clase administrada?
- 26. ¿Es posible usar un dispositivo para ejecutar una aplicación exclusivamente?
- 27. ¿Es posible desarrollar una aplicación Flash usando solo código abierto?
- 28. El atributo DllImport siempre carga la DLL no administrada
- 29. Porting (no administrado) C++ a C# frente al uso de C++ como una DLL en una aplicación C#
- 30. ¿Cómo puedo usar un dll C# (managed) que no tengo?
+1: Excelente google-fu! Ese enlace es exactamente lo que Matthew necesita. –
@Binary Worrier - Me preocupaba que estuviera pisando los talones con el enlace de arriba, ya que parecía que iba a editar su respuesta. –
Amigo de Kudos, dedos más rápidos ganan :) –