2010-09-26 32 views
8

quiero usar dll hecho en C# (visual studio 2008) en C++ project (visual studio 2003). como hacer eso ? por favor heeelpusando C# dll en proyecto C++

+2

posible duplicado de (http://stackoverflow.com/questions/980808/how-to-use-c-dll-in-vc) –

+1

posible duplicado [Cómo utilizar C# Dll en VC++ ??] de [¿Es posible usar una DLL creada usando C# en una aplicación VC++ no administrada?] (http://stackoverflow.com/questions/2873714/is-it-possible-to-use-a-dll-created-using- c-in-an-unmanaged-vc-application) –

+0

@ 0xA3: Tengo curiosidad, ¿cómo facilitaría VC++ 2008 las cosas? El código compilado en VC 2003 puede incluir componentes COM, y puede incluir cualquier tipo de DLL contenedor nativo, incluso si está escrito en VC2008, ¿verdad? – Niki

Respuesta

11

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

  1. 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)

  2. 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)

  3. 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)

  4. 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. (Marco Code-En-Uno la muestra: CppCLIWrapLib)

1

No se pueden usar directamente ensamblados .NET desde código C++ no administrado. Una posible solución es exponer el ensamblado como objeto COM utilizando la utilidad regasm.exe y luego consumirlo desde C++. Tenga en cuenta que los tipos de .NET que deben exponerse como objetos COM pueden necesitar ser decorados con el atributo [COMVisible(true)] y aún requerirían el .NET framework instalado en la computadora de destino que ejecuta el código C++.

1

Hay muchas formas de hacerlo.

¿La DLL C# es una DLL COM? De ser así, puede usar la API/Especificación COM regular para acceder a ella en su programa C++. Hay muchos tutoriales sobre cómo hacer que su C# DLL COM sea visible. No es tan difícil, unos pocos switches de compilación y atributos de C# básicamente.

De lo contrario, ¿puede compilar su proyecto C++ utilizando el /clr interruptor del compilador? Si es así, puede usar el Using Directive para importar directamente su C# DLL.

0

Haga el archivo de biblioteca [.Tlb] y solo nosotros podremos usar el dll. Debe crear .TLB (archivo de biblioteca de tipos) de su C# DLL original y usar esa biblioteca .TLB en el código de VC++. Para eso, debe registrar el archivo .TLB en su PC, así como también es necesario importar ese archivo .TLB en su aplicación vC++. Cuando escriba C# DLL recuerde usar interfaces que se implementarían en la clase.

1

Como dijo Darin, una forma es a través de COM. Las otras dos formas (lo sé) son:

  • Puede crear una DLL de modo mixto en C++. Esa DLL puede contener y llamar al código administrado, pero también puede exportar funciones no administradas, como una DLL normal de C++. Se puede incluir como cualquier otra DLL de C++
  • Es mucho más difícil, pero también puede alojar el CLR. Google para "alojamiento CLR" para encontrar detalles sobre la API o muestras.
1

después de ajustar la "Resolver referencias # using" (Proyecto-> C/C++ -> General) opción del compilador al directorio que contiene el conjunto quieres, luego pones una línea como esta en tu código.

#using <NiftyAssembly.dll>