2011-05-06 15 views
10

Tengo un archivo de biblioteca C++ (.lib). ¿Cómo puedo acceder a las funciones dentro de este desde C#? He leído que podría envolver el archivo de la biblioteca en un C++ dll y exponer las funciones de esa manera. ¿Es esa la única forma? No soy el propietario del código, por lo que mis opciones son limitadas.Accediendo a una biblioteca .lib de C++ desde C#

Respuesta

6

Envuelva la biblioteca de C++ con un conjunto de C++/CLI.

C++/CLI le permite mezclar código administrado y no administrado, sirviendo como un puente entre C# y C++ nativo. En realidad es muy sencillo y relativamente fácil de hacer, aunque puede ser tedioso si tiene muchas clases/funciones para envolver.

Here es un ejemplo.

+0

Gracias. Este es el enfoque que utilizaré ya que no puedo modificar la biblioteca original de C++. –

0

No puede acceder directamente a un archivo de biblioteca C++ (.lib). La mejor manera es tener un contenedor no administrado alrededor de su código no administrado. Referencia DllImportAttribute.

Hay un buen ejemplo de ello es el uso en el documento de ayuda de MSDN:

using System; 
using System.Runtime.InteropServices; 

class Example 
{ 
    // Use DllImport to import the Win32 MessageBox function. 
    [DllImport("user32.dll", CharSet = CharSet.Unicode)] 
    public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type); 

    static void Main() 
    { 
     // Call the MessageBox function using platform invoke. 
     MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0); 
    } 
} 


También tenga en cuenta: Usted puede tener una C++ contenedor administrado alrededor de su biblioteca de C++, pero es mejor para escribir su envoltorio en no administrado código C++.

+0

DllImport puede importar * .lib? No lo sabía :) –

+0

Sí, mi respuesta fue un poco apresurada. Leí C++ y al instante pensé que se refería a un ensamblado compilado. Me perdí la parte .lib porque algunas personas usan el término biblioteca de manera similar al ensamblaje. –

0

Puede convertir lib a dll con este cmd script. Después de eso, podrás usar DllImport para acceder a sus funciones. Pero tuvo que modificarlo un poco para que este script funcione.

+0

El enlace ya no es válido. – Flynn1179

Cuestiones relacionadas