Таким образом, в таблицу экспорта dll добавляются
функции-псевдонимы, имена которых соответствуют функциям, объявленным в
заголовочном файле нашей библиотеки. Для полного соответствия (хотя этого можно
и не делать) удалим из ImplicitLinking_cdecl.def упоминания обо всех
посторонних для приложения-клиента функциях, так как заголовочный файл содержит
объявления только двух функций. В результате получим .def-файл готовый для
генерации из него объектного .lib-файла:
ImplicitLinking_cdecl.def
libRARY IMPLICITLINKING_CDECL.DLL
EXPORTS
SumFunc @4 ; SumFunc
ViewStringGridWnd @5 ; ViewStringGridWnd
ПРИМЕЧАНИЕ
В единственной статье, которую мне удалось найти по данной теме (на сайте bcbdev.com), рекомендовалось, помимо удаления из .def-файла посторонних функций, заменить
наименование секции EXPORTS на IMPORTS. Делать этого не следует по той
простой причине, что утилита lib.exe (по крайней мере, поставляемая с 6-ой и
7-ой Visual Studio) секцию IMPORTS не поддерживает, поэтому игнорирует все
последующие описания функций и создает пустой .lib-файл. Утилита lib.exe
находится в каталоге $(VC)Bin, но запустить ее обычно с первого раза не
удается, поскольку для работы ей требуется библиотека mspdb60.dll (для
lib.exe, поставляемой с Visual Studio 7 – mspdb70.dll). mspdb60.dll лежит в
папке $(Microsoft Visual Studio)CommonMSDev98Bin, а mspdb70.dll – в папке
$(Microsoft Visual Studio .NET)Common7IDE.
С помощью утилиты lib.exe создадим необходимый для
неявного связывания .lib-файл в формате COFF, для этого в командной строке
наберем
Полученный .lib-файл добавим к проекту VC-клиента (Project -> Add
To Project -> Files…).
Использование директивы препроцессора #define
Теперь рассмотрим способ, позволяющий добиться
одинаковых названий функций в заголовочном и объектном (.lib) файлах с помощью
директивы #define. Перепишем заголовочный файл нашей BCB-библиотеки следующим
образом
Листинг 4 - Компилятор Borland C++ Builder 5
ImplicitLinking_cdecl.h
#ifndef _IMPLICITDLL_
#define _IMPLICITDLL_
#ifdef _DLLEXPORT_
#define _DECLARATOR_
__declspec(dllexport)
#else
#define _DECLARATOR_
__declspec(dllimport)
#endif
extern "C"
Рекомендуем скачать другие рефераты по теме: инновационная деятельность, заключение дипломной работы.