Материалы по технологиям программирования с использованием продуктов Embarcadero.
- Информация о материале
- Автор: Vsevolod V Gromov
- Категория: Embarcadero
- Просмотров: 2892
В предыдущей серии мы создавали объекты с использованием обертки, написанной на Delphi, включенной в проект C++ Builder. В этот раз сделаем еще лучше - напишем параметризованный вызов конструктора объекта Delphi на С++, используя Delphi RTTI.
- Информация о материале
- Автор: Vsevolod V Gromov
- Категория: Embarcadero
- Просмотров: 2700
Изначально компилятор паскаля будет ругаться на ненайденные модули (dcu) из состава ToolsAPI. Даже если пакет С++ Builder использует designide.bpi, модули в нем перечислены объектные, с расширением obj, а нужны dcu.
Проблема решается добавлением опции '-LUDesignIDE' в секцию Delphi Compiler, поле - Additional options to pass to compiler
- Информация о материале
- Автор: Vsevolod V Gromov
- Категория: Embarcadero
- Просмотров: 2713
Этот небольшой полезный шаблонный хелпер позволяет автоматически запрещать и разрешать обновления компонентов, используя RAII идиому. Освобождение залоченного объекта произойдет даже при возникновении исключительной ситуации.
- Информация о материале
- Автор: Vsevolod V Gromov
- Категория: Embarcadero
- Просмотров: 3554
В Дельфи есть удобный сервис создания объектов\компонентов из известного метакласса этого объекта\компонента.
В C++ Builder такого сервиса язык С++ не предоставляет (насколько я знаю), даже с учетом его нестандартных расширений Embarcadero. Реализовать недостающий функционал можно используя симбиоз из pas и cpp. Кроме того, надо понимать, что этот подход работает только для чистых Delphi объектов. С++ класс, порожденный от базового Delphi класса, это уже гибрид, который с помощью такого метода создавать небезопасно.
- Информация о материале
- Автор: Vsevolod V Gromov
- Категория: Embarcadero
- Просмотров: 2773
Вы строите/перестраиваете компонент дельфи для использования в С++ Builder, имея только установленный С++ Builder. Используйте MSBuild из командной строки. Добавьте в проект dproj в базовые опции элемент
<DCC_CBuilderOutput>All</DCC_CBuilderOutput>
. Это заставит компилятор генерировать необходимые файлы для использования полученных компонентов в проектах Builder. Add
<DCC_CBuilderOutput>All</DCC_CBuilderOutput>
to dproj file to generate C++ Builder bpi|hpp etc. files when building delphi packages for c++ with msbuild.
- Информация о материале
- Автор: Vsevolod V Gromov
- Категория: Embarcadero
- Просмотров: 2870
Я подчеркиваю, для XE4, т.к. экосистема Эмбаркадеро постоянно изменяется и растет.
// InheritsFrom does not work properly in C++ Builder (as many other Delphi RTTI stuff)
bool isInheritedFrom(TRttiInstanceType* t1, TRttiInstanceType* t2)
{
if( t1 && t2 )
{
while( t1 )
{
if( t1 == t2 )
return true;
t1 = t1->BaseType;
}
}
return false;
}
- Информация о материале
- Автор: Vsevolod V Gromov
- Категория: Embarcadero
- Просмотров: 3694
Вводные.
Embarcadero C++ Builder XE4 (но встречалось неоднократно и в других версиях билдера)
Ситуация (довольно таки распространенная) следующая:
- Есть проект exe, использующий сторонние компоненты
- Сторонние компоненты периодически обновляются
- После очередного обновления компонентов запускаем (почищенный, нормально скомпилированный) проект, получаем - AV где-то в недрах, на этапе создания формы, использующей сторонние компоненты.
Решение - см. далее...
- Информация о материале
- Автор: Vsevolod V Gromov
- Категория: Embarcadero
- Просмотров: 5665
Предыстория.
Среда - С++ Builder XE4.
Визуальный фреймворк - FireMonkey3.
Есть группа проектов, несколько дллей, рантайм-пакеты, и исполняемый файл, который это все хозяйство использует.
Проблема.
- Проект исполняемого файла не линкует к себе мои локальные рантайм-пакеты
- Если принудительно включить bpi файлы моих пакетов в проект, они линкуются всегда динамически, даже если снять в опциях проекта флажок "Link with Runtime packages"