Cómo hacer un archivo .lib cuando tiene un archivo .dll y un archivo de cabecera

Intento crear una aplicación en Visual Studio que pueda acceder a un archivo .dll que ya existe. Necesito la aplicación para llamar a las rutinas. También tengo un archivo de encabezado que ya existe.

He estado investigando en Internet y he descubierto que necesito crear un archivo .lib. Mirando preguntas similares aquí encontré un enlace: http://support.microsoft.com/kb/131313 No obstante, no puedo seguir las instrucciones.

La información en el enlace dice que se debe hacer un archivo DEF (¿He leído en otro lugar que esto debe comstackrse como un archivo DLL con el mismo nombre, pero no estoy seguro de cuál es ese nombre, el mismo nombre que el archivo .dll?). Pero no entiendo la primera dirección, a “Usar DUMPBIN / EXPORTS”. Luego necesito ‘colgar’ las funciones, y luego algo relacionado con los archivos .OBJ (no sé qué son estos archivos).

¿Hay instrucciones paso a paso, similares al enlace anterior, que sean fáciles de seguir?

Necesitará Microsoft Visual C ++ 2010 Express (o cualquier otra fuente de herramientas de línea de comandos de MSVC) y su DLL.

Pasos:

  1. dumpbin /EXPORTS yourfile.dll > yourfile.exports
  2. Pegue los nombres de las funciones necesarias de yourfile.exports en un nuevo archivo yourfile.def . Agregue una línea con la palabra EXPORTS en la parte superior de este archivo.
  3. Ejecute los siguientes comandos desde el directorio VC\bin (aquel en el que lib.exe y otras herramientas de comstackción).
  vcvars32.bat lib /def:yourfile.def /out:yourfile.lib 

Debería obtener dos archivos generados: yourfile.lib y yourfile.exp

Puede usar la herramienta IMPLIB de Mars Digital. Puede crear un archivo lib usando solo el dll, sin necesidad de un archivo .def.

El enlace de descarga es http://ftp.digitalmars.com/bup.zip .

La línea de comando es:

 implib.exe /s mydll.lib mydll.dll 

En lugar de crear .def, puede crear un archivo .lib a partir del archivo .dll exportando las funciones / clases definidas en el archivo .dll por __declspec (dllexport) que se mencionaron en el código de la aplicación.

Por ejemplo (Pseudo código)

PROYECTO para crear un archivo X.dll (digamos, X es un nombre dll):

Ah:

 // Function declaration __declspec(dllexport) void foo(void); 

A.cpp:

 // Function definition #include  void foo(void) { ; // definition } 

Si construye el proyecto dll anterior en Visual Studio, el comstackdor generará X.dll y también X.lib [que exportó la función foo por __declspec (dllexport)].

App.cpp:

 // Load time dynamic linking: // Application should include X.lib (not X.dll) in the project setting #include  int main() { foo(); return 0; } 

Para obtener más información, consulte los siguientes enlaces para una mejor comprensión:

http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL#CppMatureApproach

http://msdn.microsoft.com/en-us/library/ms686923(v=vs.85).aspx