Создание в среде Borland C++ Builder dll, совместимой с Visual C++
Категория реферата: Рефераты по информатике, программированию
Теги реферата: биология 6 класс, конспекты 9 класс
Добавил(а) на сайт: Селиванов.
Предыдущая страница реферата | 4 5 6 7 8 9 10 11 12 13 14 | Следующая страница реферата
Если экспортируются функции с соглашением о вызове __cdecl, то добавить к проекту .def-файл с псевдонимами для каждой такой функции.
Откомпилировать dll.
Создать клиентский (то есть использующий BCB библиотеку) VC-проект.
Скопировать созданную BCB dll в папку с клиентским VC-приложением.
Загрузить dll из клиентского приложения в память при помощи LoadLibrary.
Получить адрес требуемой функции с помощью GetProcAddress и присвоить его указателю на функцию.
Вызвать функцию с помощью указателя на нее.
По окончании использования выгрузить dll из памяти с помощью FreeLibrary.
Алгоритм с неявным связыванием для экспорта (импорта) __cdecl-функций
Как следует из названия раздела, данный способ предназначен для экспорта (а на клиентской стороне – для импорта) функций с __cdecl-соглашением о вызове. Чтобы воспользоваться неявным связыванием, прежде всего, необходимо создать объектный .lib-файл (библиотеку импорта), содержащий ссылку на dll и перечень находящихся в dll функций. Данный объектный файл можно создать по .def-файлу экспорта библиотеки с помощью утилиты lib.exe. При этом полученный .lib-файл будет в нужном нам формате COFF, поскольку компилятор VC придерживается именно этой спецификации (утилита lib.exe поставляется совместно с VC и умеет создавать библиотеки импорта только по .def-файлу). Готовый .lib-файл прилинковывается к клиентскому проекту.
При неявном связывании приложение не подозревает, что использует dll, поэтому функции, вызываемые из динамической библиотеки, как и любые другие, должны быть объявлены в тексте клиентской программы. Для объявления функций воспользуемся исходным заголовочным файлом BCB dll, но функции в нем должны быть помечены уже не как __declspec(dllexport), а как __declspec(dllimport), то есть как импортируемые извне, поскольку по отношению к клиентскому приложению эти функции являются именно импортируемыми.
Исходный текст dll на этот раз будет выглядеть следующим образом:
Листинг 3 - Компилятор Borland C++ Builder 5
ImplicitLinking_cdecl.h
#ifndef _IMPLICITDLL_ #define _IMPLICITDLL_ // если макрос-идентификатор _DLLEXPORT_ был определен ранее, // то макрос _DECLARATOR_ пометит функцию как экспортируемую, // в противном случае функция будет помечена как импортируемая. // Данная конструкция из директив препроцессора позволяет // воспользоваться заголовочным файлом библиотеки как на этапе // создания DLL, так и на этапе ее использования, а именно, при // неявном связывании. #ifdef _DLLEXPORT_ #define _DECLARATOR_ __declspec(dllexport) Рекомендуем скачать другие рефераты по теме: инновационная деятельность, заключение дипломной работы. Предыдущая страница реферата | 4 5 6 7 8 9 10 11 12 13 14 | Следующая страница реферата Поделитесь этой записью или добавьте в закладкиКатегории: |