Памятка по DLL, lib компиляции, импорту и экспорту
Смотрите также статью Проблемы с STL в DLL
Почему в MSVC не создается lib файл для dll?
1 В настройках проекта Settings->Link->General НЕ должно стоять отметки Dausn\'t produce .LIB
2 В исходниках должна быть определена хотябы одна экспортируемая функция (см. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore9...) Это можно сделать следующими способами:
a Указанием типа __declspec(dllexport) в исходниках проекта
Пример:
...
#ifdef _LIB_
#define LIB_EXPORT __declspec(dllexport)
#else
#define LIB_EXPORT __declspec(dllimport)
#endif
...
LIB_EXPORT int function(int iArg);
...
б Добавлением в проект def файла. Это особенно полезно при невозможности менять исходники
Пример:
//Содержимое lib.def
LIBRARY libxml2
EXPORTS
UTF8ToHtml
UTF8Toisolat1
attribute
attributeDecl
cdataBlock
3 Неверное указание пути Settings->General->Output files
Как импортировать функции dll в Borland C Builder?
Есть утилита implib.exe
1 Для импорта в С++ формате implib libname.lib libname.dll
2 Для импорта в С формате implib -a libname.lib libname.dll
Как импортировать функции dll Borland в MS Visual studio 6.0?
1 Создаем def файл
Пример:
impdef ParseAddr.def ParseAddr.dll
2 При необходимости из def файла удаляем лишние функции и знаки \'_\'
3 Создаем lib файл при помощи утилиты lib.exe
Если пути не проставлены ее можно найти в "C:\Program Files\Microsoft Visual Studio\VC98\Bin"
Кстати, потребуется также файл MSPDB60.DLL ("C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin")
Пример:
LIB.exe /def:F:\Laboratory\ParseAddr.def /out:F:\Laboratory\ParseAddr.lib