Основным преимуществом неявной загрузки dll является
именно неявность использования dll со стороны клиентского приложения. Другими
словами, приложение, вызывая функции, не подозревает, что они могут находиться
где-то во внешнем модуле. Результатом является упрощение кода программы. К
недостаткам следует отнести тот факт, что dll находится в памяти в течение всей
работы программы, неявно ее использующей. Загрузка dll осуществляется при
загрузке приложения – загрузчик PE-файлов, просматривая каждую запись в таблице
импорта приложения, загружает соответствующую этой записи dll. Следовательно, если используемых библиотек много, загрузка основной программы может
затянуться. В случае отсутствия неявно используемой dll приложение вообще не
запустится.
Итоговый алгоритм с неявным связыванием для экспорта
(импорта) __cdecl-функций состоит из следующей последовательности действий (см.
также Демонстрационный проект):
1. Объявить экспортируемые функции как __cdecl.
2. Поместить объявления функций в блок extern ”С”, при
этом не экспортировать классы и функции-члены классов.
3. В заголовочный файл для возможности его дальнейшего
использования на клиентской стороне вставить:
#ifdef _DLLEXPORT_
#define _DECLARATOR_
__declspec(dllexport)
#else
#define _DECLARATOR_
__declspec(dllimport)
#endif
|
и добавить макрос _DECLARATOR_ к объявлению каждой
функции, например,
int
_DECLARATOR_ __cdecl SumFunc( int a, int b );
|
4. Далее либо создать и добавить к проекту .def-файл с
псевдонимами для каждой функции, либо добавить в заголовочный файл библиотеки
следующее:
#ifdef _MSC_VER
#define FuncName1 _FuncName1
#define FuncName2 _FuncName2
#define FuncNameN _FuncNameN
#endif
|
Если использовался #define-трюк, то пункт 7 нужно
будет пропустить.
5. Скомпилировать BCB dll.
6. С помощью impdef.exe создать .def-файл с
наименованиями экспортируемых функций.
Рекомендуем скачать другие рефераты по теме: инновационная деятельность, заключение дипломной работы.
Предыдущая страница реферата |
8
9
10
11
12
13
14
15
16
17
18 |
Следующая страница реферата