Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornaya_rabota_8_dll.doc
Скачиваний:
21
Добавлен:
29.03.2015
Размер:
95.23 Кб
Скачать

Использование модуля ShareMem

Если динамическая библиотека в процессе работы использует переменные или функции, осуществляющие динамическое выделение памяти под собственные нужды (длинные строки, динамические массивы, функции New и GetMem), а также, если такие переменные передаются в параметрах и возвращаются в результатах, то в таких библиотеках обязательно должен использоваться модуль ShareMem. При этом в секции uses модуль должен располагаться на первом месте. Об этом напоминает комментарий, автоматически добавляемый в файл динамической библиотеки при создании.

Управление этими операциями осуществляет специальный диспетчер печати BORLANDMM.DLL. Он должен распространяться вместе с динамическими библиотеками, использующими модуль ShareMem.

Вызов dll-библиотеки из Visual C++

Для вызова библиотеки необходимо выполнить следующие действия:

  1. Необходимо объявить все экспортируемые в Delphi DLL функции с ключевыми словами export; stdcall.

  2. Файл заголовка VC++ должен объявить все функции как тип __declspec(dllexport) __stdcall

extern "C" {

int __declspec(dllexport) __stdcall plusone(int); }

  1. Kомпилятор VC++ изменяет имена функций __stcall, так что Delphi DLL соответственно должна экспортировать эти функции. Необходима модификация имен Delphi-функций, прописанных в разделе экспорта. Например, если экспортируется функция function plusone (intval : Integer), необходимо включить следующую строку в раздел экспорта файла:

plusone name 'plusone@4'

Число, следующее за символом @, является общей длиной в байтах всех функциональных аргументов. Самый простой путь для обнаружения неправильных значений линковка VC++ программы и просмотр на наличие возможной ошибки компоновщика "unresolved external".

  1. Необходимо создать библиотеку импорта, используя утилиту LIB из поставки VC++. Для этого необходимо вручную создать .DEF-файл для DLL с секцией экспорта, перечисляющей имена и/или порядковые номера всех экспортируемых DLL функций. Формат .DEF-файла представлен ниже.

library MYLIB

description 'Моя DLL'

exports

plusone@4

  1. Запустите команду LIB из командной строки, в качестве параметра подставляете имя .DEF-файла. Например, LIB /DEF:MYDLL.DEF..

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]