(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Двуязычие в народ

Источник: delphikingdom
Дмитрий Солодский

Автор: Дмитрий Солодкий, Королевство Delphi

В статье описана практика написание проекта на двух языках: Delphi и С++. Во-первых, зачем это нужно? Каждый достаточно большой проект рано или поздно приходит к вопросу разделения труда. То бишь как могут несколько людей работать над одним и тем же проектом. Здесь есть множество решений. Одним из них есть концепция Plugins. Даная тема прекрасно описывается в статье Дмитрия Полщанова "Еще раз о Plugin's…". Но со временем в команде появляться люди или задачи, для которых лучше бы подошел язык С++. Об написание плагинов для проекта на Delphi на языке С++ и пойдет дальше речь.

Что бы мы хотели получить? Есть проект написанный на Delphi. Есть подсистема плагинсов тоже, естественно, на Delphi. Задача состоит в написании такого же плагина, но на С++ Builder.

Единственным отличием между пакетами (bpl), которые написаны на С++ Builder, и пакетами на Delphi являються 2 вещи:

  1. Пакеты С++ Builder используют динамическую библиотеку С++ и внешний менеджер памяти (cc32**mt.dll, borlndmm.dll). Пакеты, написанные на Delphi, эти библиотеки не используют. Такое поведение линкера С++ можно отключить в опциях линкера (Use dynamical RTL). После отключения такого поведения пакету больше не нужен внешний менеджер памяти borlndmm.dll, а вместо него будет работать rtl100.bpl.
  2. В С++ Builder нет понятия "модуль". А значит, у нас не будет секции Initialization. Вместо неё можно использовать либо экспортируемые функции, либо функцию DllEntryPoint.

Для того, что бы получить заголовки классов, которые написаны на Delphi, нужно использовать переключатели в опциях проекта Linker\Linker output\Generate all C++ Builder files. Это заставит линкер не только создать bpl и dcu файлы, но и создать заголовочные файлы (hpp), файл импорта (bpi) и статическую библиотеку (lib). После таких манипуляций у вас будет полный доступ ко всем модулям пакета. Кроме того, все компоненты пакета также появятся в палитре компонентов С++ Builder.

Когда Delphi компилирует пакет, все классы и функции, описанные в модулях пакета в интерфейсных секциях, будут экспортируемыми. Для того чтобы класс или функция С++ были экспортируемыми, их достаточно описать с макросом PACKAGE.

Interface
Type
   TMyClass = class
   public 
     Procedure myProc;
   end;

procedure MyGlobalProc;

На С++ этот код будет выглядеть так:

class PACKAGE TMyClass : public TObject
{
    public :
	void __fastcall myProc();
}
void PACKAGE __fastcall MyGlobalProc();

Ссылки по теме

Файлы для загрузки


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 20.04.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Enterprise Connectors (1 Year term)
Delphi Professional Named User
IBM DOMINO COLLABORATION EXPRESS AUTHORIZED USER ANNUAL SW SUBSCRIPTION & SUPPORT RENEWAL
Allround Automation PL/SQL Developer - 5 user license
SAP® Crystal Dashboard Design Departmental 2016 WIN INTL NUL
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
eManual - электронные книги и техническая документация
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100