Читать реферат по информатике, вычислительной технике, телекоммуникациям: "Создание в среде Borland C++ Builder dll, совместимой с Visual C++" Страница 2
- 1
- 2
- 3
- 4
- . . .
- последняя »
используя перед определением функции директиву extern ”С” (но при этом, во-первых, на передний план выходит первая проблема – разные соглашения о наименовании функций в dll, а во-вторых, из двух и более функций с одинаковым именем директиву extern ”С” можно использовать только для одной из них, в противном случае возникнут ошибки при компиляции), то для функций-методов класса искажения имени неизбежны. Компиляторы Borland и Microsoft, как вы уже, вероятно, догадались, используют различные схемы внесения искажений. В результате VC-приложения попросту не видят классы и методы классов, экспортируемые библиотеками, скомпилированными в BCB.
| ПРИМЕЧАНИЕ От редакции: В частности, разновидностями полиморфизма времени компиляции являются перегрузка (ad-hoc полиморфизм) и шаблоны функций (параметрический полиморфизм). |
Эти три проблемы осложняют использование BCB dll из приложений, созданных на VC, но все-таки это возможно. Ниже описаны три способа создания dll совместимой с VC и дальнейшего успешного использования этой dll.
Алгоритмы создания VC-совместимой dll и ее использование
Два из описанных в этом разделе алгоритмов применяют неявное связывание с dll, один – явную загрузку dll. Опишем сначала самый простой способ – использование BCB dll из проекта VC посредством ее явной загрузки в процессе выполнения программы.
Алгоритм с явной загрузкой dll
Применяя данную технику, нам не придется создавать совместимые с VC библиотеки импорта (.lib). Вместо этого добавится ряд действий по загрузке и выгрузке dll в приложении, ее использующем.
Создадим BCB dll (New -> DLL Wizard -> C++ -> Use VCL -> OK), экспортирующую для простоты всего две функции. Одна из функций будет вычислять сумму двух чисел и не будет использовать VCL-классы, а другая будет создавать окно и выводить в VCL-компонент TStringGrid элементы массива, переданного в качестве одного из аргументов.
| ПРИМЕЧАНИЕ Поскольку действия, производимые функциями, в нашем случае абсолютно не важны, данные примеры не несут смысловой нагрузки, однако стоит обратить внимание на функцию ViewStringGridWnd, которая показывает, что внутри самой dll использовать VCL-классы можно без каких-либо ограничений. |
Листинг 1 - Компилятор Borland C++ Builder 5
ExplicitDll.h
| #ifndef _EXPLICITDLL_#define _EXPLICITDLL_extern "C"{ int __declspec(dllexport) __cdecl SumFunc(int a, int b); HWND __declspec(dllexport) __stdcall ViewStringGridWnd(int Count,double* Values);}#endif |
Ключевое слово __declspec с атрибутом dllexport помечает функцию как экспортируемую, имя функции добавляется в таблицу экспорта dll. Таблица экспорта любого PE-файла (.exe или .dll) состоит из трех массивов: массива имен функций (а точнее, массива указателей на строки, содержащие имена функций), массива порядковых номеров функций и массива относительных виртуальных адресов (RVA) функций. Массив имен функций упорядочен в алфавитном порядке, ему соответствует массив порядковых номеров функций. Порядковый номер после некоторых преобразований превращается в индекс элемента из массива относительных виртуальных адресов функций. При экспорте функции по имени имеет место следующая последовательность действий: по известному имени функции определяется ее индекс в массиве имен функций, далее по полученному индексу из массива порядковых номеров определяется порядковый номер функции, затем из порядкового номера, с учетом
- 1
- 2
- 3
- 4
- . . .
- последняя »
Похожие работы
| Тема: Создание в среде Borland C++ Builder dll, совместимой с Visual C++ |
| Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
| Тема: Создание диалоговых программ с использованием структур и файлов в среде C++Builder |
| Предмет/Тип: Информационное обеспечение, программирование (Курсовая работа (т)) |
| Тема: Разработка многопоточных Windows-приложений в среде Borland C Builder |
| Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
| Тема: Моделирование транспортных потоков в среде Borland C++ Builder |
| Предмет/Тип: Отсутствует (Курсовая работа (т)) |
| Тема: Программа обработки DICOM файлов в среде Builder C++ |
| Предмет/Тип: Отсутствует (Диплом) |
Интересная статья: Быстрое написание курсовой работы

(Назад)
(Cкачать работу)