(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
Delphi Professional Named User
Enterprise Connectors (1 Year term)
Microsoft 365 Business Basic (corporate)
IBM Rational Functional Tester Floating User License
Quest Software. SQL Navigator for Oracle
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Реестр Windows. Секреты работы на компьютере
СУБД Oracle "с нуля"
Один день системного администратора
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100