Явная загрузка dll имеет как преимущества, так и
недостатки. В нашем случае большим плюсом является то, что явная загрузка
избавляет от какого бы то ни было взаимодействия с исходным кодом dll, в
частности нет необходимости подключать заголовочный .h-файл с объявлениями
функций. Клиентское приложение компилируется и работает независимо от
используемой dll, а случаи неудачной загрузки библиотеки или неудачного
получения адреса функции всегда можно обыграть так, чтобы они не повлияли на
дальнейшее выполнение основного приложения.
ПРИМЕЧАНИЕ
Следует отметить, что использование
экспортируемых unmanaged-функций из управляемого кода (managed code) в .NET
осуществляется исключительно посредством явной загрузки dll. К процессу
вызова функции в этом случае помимо стандартных шагов (таких как загрузка dll
в память посредством LoadLibrary, получение адреса требуемой функции с помощью
GetProcAddress и непосредственно вызов), добавляется также процесс маршалинга
(marshaling), то есть процесс преобразования типов данных .NET в их аналоги в
традиционном двоичном коде (при проталкивании аргументов в стек) и обратно
(при анализе возвращаемого значения). Для указания, что метод импортируется
из dll, используется атрибут DllImport, параметры которого содержат
информацию, необходимую для вызова LoadLibrary и GetProcAddress.
|
Таким образом, для вызова экспортируемой функции из
dll, скомпилированной в BCB, необходимо выполнить следующую последовательность
действийя:
Объявить экспортируемые функции либо как __cdecl, либо
как __stdcall. Если используется только соглашение __stdcall, пропускаем пункт
3.
Поместить объявления функций в блок extern ”С”. Не
экспортировать классы и функции-члены классов, поскольку это все равно не
удастся.
Рекомендуем скачать другие рефераты по теме: инновационная деятельность, заключение дипломной работы.
Предыдущая страница реферата |
3
4
5
6
7
8
9
10
11
12
13 |
Следующая страница реферата