Как сделать .lib файл, когда есть .dll файл и заголовочный файл

Я пытаюсь создать приложение в visual studio, которое сможет получить доступ к DLL файлу, который уже существует. Мне нужно приложение для вызова подпрограмм. У меня также есть файл заголовка, который уже существует.

Я изучаю в Интернете и обнаружил, что мне нужно создать .lib файл. Если посмотреть на подобные вопросы, здесь я нашел ссылку: http://support.microsoft.com/kb/131313 Однако я не могу следовать указаниям.

Информация в ссылке говорит о создании файла DEF (я читал в другом месте, что это нужно скомпилировать как DLL с тем же именем, но не уверен, что это имя, с тем же именем, что и DLL файл?), Но я не понимаю первого направления: "Использовать DUMPBIN/EXPORTS". Затем мне нужно "заглушить" функции, а затем что-то делать с файлами .OBJ(я не знаю, что это за файлы).

Есть ли пошаговые инструкции, похожие на приведенные выше ссылки, которые легко отслеживать?

Ответ 1

Вам понадобится Microsoft Visual С++ 2010 Express (или любой другой источник средств командной строки MSVC) и ваша DLL.

Шаги:

  • dumpbin /EXPORTS yourfile.dll > yourfile.exports
  • Вставьте имена необходимых функций из yourfile.exports в новый yourfile.def файл. Добавьте строку со словом EXPORTS вверху этого файла.
  • Выполните следующие команды из каталога VC\bin (тот, где lib.exe и другие инструменты компиляции).

 

 vcvars32.bat

 lib /def:yourfile.def /out:yourfile.lib

Вы должны создать два файла: yourfile.lib и yourfile.exp

Ответ 2

Вы можете использовать инструмент Digital Mars IMPLIB. Он может создать файл lib, используя только DLL, без необходимости в файле .def.

Ссылка для скачивания http://ftp.digitalmars.com/bup.zip.

Командная строка:

implib.exe /s mydll.lib mydll.dll

Ответ 3

Вместо создания .def вы можете создать .lib файл из DLL файла, экспортировав функции/классы, определенные в файле .dll, __declspec (dllexport), которые были указаны в коде приложения.

Например (псевдо-код)

ПРОЕКТ для создания файла X.dll(скажем, X - имя dll):

хиджры:

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

a.cpp:

// Function definition 
#include <A.h>
void foo(void) {
; // definition
}

Если вы создадите вышеупомянутый проект dll в Visual Studio, тогда компилятор будет генерировать X.dll, а также X.lib [который экспортировал функцию foo по __declspec (dllexport)].

App.cpp:

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

Для дальнейшего изучения, пожалуйста, обратитесь к следующим ссылкам для лучшего понимания:

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