2010-04-14 21 views
35

Tengo un proyecto de C++. Admito que soy un ZERO completo en C++. Pero aún tengo que escribir un contenedor de C++. Net para poder trabajar con una biblioteca de C++ no administrada que lo use. Entonces lo que tengo: 1) archivos de encabezado del proyecto no administrado. 2) de las bibliotecas (.dll y de .lib) proyecto no administrado 3) un C++ vacío. NET, que voy a utilizar como un contenedor para mi C# aplicaciónCreando un contenedor simple de C++. Net. Paso a paso

¿Cómo puedo empezar? Ni siquiera sé cómo establecer una referencia a una biblioteca no administrada.

S.O.S.

+13

+1 para sonar tan desesperado y desorientado como estoy en exactamente la misma situación :) –

Respuesta

35

http://www.codeproject.com/KB/mcpp/quickcppcli.aspx#A8

Esta es la dirección general. Necesita crear un proyecto de biblioteca de clases C++/CLI, agregarle clase .NET (StudentWrapper en este ejemplo), crear una instancia de clase no administrada como miembro de clase administrada y ajustar cada función de clase no administrada. La biblioteca no administrada se agrega al proyecto C++/CLI utilizando la lista de dependencias del enlazador, y no como referencia. En el Proyecto - Propiedades - Enlazador, abra Dependencias Adicionales y agregue el nombre .lib allí.

Nota: ya que estamos hablando de C++/CLI wrapper, no PInvoke! PInvoke se usa para llamar a funciones exportadas (API) y no a clases.

+5

C++/CLI es en realidad implícita P/Invoke, por lo que todavía es P/Invoke. http://msdn.microsoft.com/en-us/library/2x8kf7zx.aspx, también puede usar P/Invoke para llamar a las clases de C++, solo necesita hacer un trabajo extra. – xInterop

+0

Aquí otro gran artículo sobre [codeproject (link)] (http://www.codeproject.com/Articles/651516/Exposing-native-to-managed-Cplusplus-CLI-vs-P-Invo). Describe ambos P/Invoke y C++/CLI. Crédito a Shmuel Zang. –

8

Necesita usar p/invoke desde .NET para hablar con su DLL no administrada.

Básicamente, crea un encabezado de función para cada función que desea llamar en su DLL no administrada, y le indica a .NET en qué DLL reside la función, luego simplemente llame esa función como cualquier otra en su contenedor .NET.

Ni siquiera necesita ningún conocimiento de C++, siempre que sepa la definición de función de las funciones en su DLL no administrada y los tipos de datos correctos.

+1

El enlace parece estar roto a partir de hoy – qbolec

Cuestiones relacionadas