Согласно таблице 1, VC экспортирует __stdcall-функции, добавляя к их наименованию информацию о списке аргументов и символ
подчеркивания. Следовательно, в объектном .lib-файле будут имена, отличные от
оригинальных имен функций, объявленных в заголовочном файле, и тем более
отличные от наименований функций, экспортируемых из BCB dll, так как
__stdcall-функции компилятор BCB экспортирует без изменений. Избавляться от
этого несоответствия будем снова посредством .def-файла. Для нашего примера он
будет следующим:
DummyDef.def
libRARY ImplicitLinking_stdcall.dll
EXPORTS
SumFunc
ViewStringGridWnd
Строка с именем библиотеки (LIBRARY) в .def-файле не
обязательна, но если она есть, то имя, указанное в ней, в точности должно
совпадать с именами ложной и исходной dll. Добавляем .def-файл к VC-проекту, перекомпилируем и получаем ложную dll и необходимую нам библиотеку импорта, содержащую корректное описание экспортируемых __stdcall-функций. .lib-файл, доставшийся в наследство от ложной dll, должен добавляться (прилинковываться) к
любому VC-проекту, который собирается использовать нашу исходную BCB dll.
Пример VC-приложения, импортирующего
__stdcall-функции, такой же, как и в предыдущем разделе (см. Листинг 5). Не
забудьте в примере подключить (#include) нужный заголовочный файл BCB dll и
добавить к проекту нужную библиотеку импорта.
Алгоритм с неявным связыванием для экспорта (импорта)
__stdcall-функций (см. также Демонстрационный проект, ImplicitLinkingDll_stdcall.zip):
Объявить экспортируемые функции как __stdcall.
Поместить объявления функций в блок extern ”С”. Не
экспортировать классы и функции-члены классов.
Скомпилировать BCB dll.
Поскольку создать корректную библиотеку импорта с
помощью утилиты lib.exe не удается, создать ложную VC dll, которая содержит
такой же набор функций, как и исходная BCB dll.
Проверить идентичность названий ложной dll и dll
исходной, названия должны совпасть.
Если для ложной библиотеки используются исходные
тексты BCB dll, то удалить тела функций, если не используются, то создать
пустые функции с такими же именами и сигнатурами, как в исходной dll.
Дабы предотвратить изменение имен функций при
экспорте, добавить к VC-проекту ложной библиотеки .def-файл с секцией EXPORTS, в которой просто перечислены оригинальные наименования всех экспортируемых
функций.
Рекомендуем скачать другие рефераты по теме: инновационная деятельность, заключение дипломной работы.