MVP Logo

Материализуя идеи

Не поднимешься в горы — не узнаешь высоты неба; не спустишься в бездну — не узнаешь толщи земли.

Изначально компилятор паскаля будет ругаться на ненайденные модули (dcu) из состава ToolsAPI. Даже если пакет С++ Builder использует designide.bpi, модули в нем перечислены объектные, с расширением obj, а нужны dcu.

Проблема решается добавлением опции '-LUDesignIDE' в секцию Delphi Compiler, поле - Additional options to pass to compiler

Этот небольшой полезный шаблонный хелпер позволяет автоматически запрещать и разрешать обновления компонентов, используя RAII идиому. Освобождение залоченного объекта произойдет даже при возникновении исключительной ситуации.

Подробнее...

В Дельфи есть удобный сервис создания объектов\компонентов из известного метакласса этого объекта\компонента.

В C++ Builder такого сервиса язык С++ не предоставляет (насколько я знаю), даже с учетом его нестандартных расширений Embarcadero. Реализовать недостающий функционал можно используя симбиоз из pas и cpp. Кроме того, надо понимать, что этот подход работает только для чистых Delphi объектов. С++ класс, порожденный от базового Delphi класса, это уже гибрид, который с помощью такого метода создавать небезопасно.

Подробнее...

Вы строите/перестраиваете компонент дельфи для использования в С++ 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.

Я подчеркиваю, для 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;
}

Вводные.

Embarcadero C++ Builder XE4 (но встречалось неоднократно и в других версиях билдера)

Ситуация (довольно таки распространенная) следующая:

  1. Есть проект exe, использующий сторонние компоненты
  2. Сторонние компоненты периодически обновляются
  3. После очередного обновления компонентов запускаем (почищенный, нормально скомпилированный) проект, получаем - AV где-то в недрах, на этапе создания формы, использующей сторонние компоненты.

Решение - см. далее...

Подробнее...

Рецепт перезагрузки персонального MySQL для хостинга Zenon (для тарифов, предоставляющих персональный MySQL).

Подробнее...

Яндекс.Метрика

Сейчас 47 гостей и ни одного зарегистрированного пользователя на сайте

14.12.2019  ©2019 - ExactSoft - All rights reserved