Памятка по 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