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

26

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

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

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

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

  • 0
    С каким компилятором вы хотите использовать полученную библиотеку? Visual Studio? Какая версия?
  • 0
    Что это за DLL?
Показать ещё 1 комментарий
Теги:
dll
function
header

3 ответа

30

Вам понадобится 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

  • 3
    Использование dumpbin.exe /EXPORTS yourfile.dll для шагов 1 и 2 вместо Dependency Walker работает так же хорошо для получения экспортированных имен функций.
11

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

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

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

implib.exe /s mydll.lib mydll.dll
  • 0
    Спасибо, я смотрю на этот IMPLIB, который вы предложили. После ссылки предлагается строка кода: implib / s kernel32.lib kernel32.dll. Я начинающий с c ++, как начать реализацию кода?
  • 0
    Это не код C ++ :) Просто откройте консоль (cmd) и выполните implib, используя вашу dll (как показано в примере с kernel32). Затем получите получившийся файл .lib в папку lib вашей IDE (или в папку проектов и добавьте путь к библиотеке в проект). После этого вы сможете свободно пользоваться этой библиотекой (просто не забывайте, чтобы DLL находилась в той же папке, что и exe-файл).
Показать ещё 3 комментария
-2

Вместо создания .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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню