Использование кода Delphi в C++BuilderИсточник: cyberguru форум c++ builder
Как вы знаете, C++Builder вырос из Delphi. Большая часть того, что есть в C++Builder, пришла напрямую из Delphi. Иногда это может быть разочаровывающим, но, тем не менее, есть некоторые преимущества. Имеется большое количество доступного кода на Delphi, который может быть серьезным подспорьем в разработке приложений на C++Builder. В некоторых случаях этот код может быть использован непосредственно. В других случаях код может быть преобразован для использования в C++Builder. Более того, существуют много компонентов Delphi, для которых не существует их аналогов в C++Builder. В C++Builder есть встроенный компилятор паскаля. Компилятор паскаля позволяет вам использовать код Delphi в C++Builder'е. Он может также помочь в конвертации кода из Delphi в C++Builder. Компилятор паскаля доступен как из IDE C++Builder, так и из командной строки. Непосредственное использование модулей DelphiЧасто вы будет обнаруживать проекты Delphi, содержащие модуль, который бы вы хотели использовать в своих приложениях. Простейшим путем использования модуля Delphi является его добавление в проект. Ниже приведены шаги, необходимые для добавления модуля Delphi в проект C++Builder'а:
Когда вы перестраиваете приложение, C++Builder использует встроенный компилятор паскаля для создания obj -файла, который приложение сможет использовать. Компилятор паскаля также создает заголовочный файл из исходного текста. Использование этого способа подключения модулей Delphi совсем несложно. Преобразование кодаКак вы можете заметить, добавление модуля Delphi в свой проект - это достаточно просто. Тем не менее, вы можете не захотеть использовать модуль Delphi таким образом. У вас могут, например, потребовать, чтобы весь ваш код был на C++. В этом случае вы будете должны перевести код паскаля в C++. Для меня не существует практического способа объяснить каждую деталь преобразования кода Delphi в C++. Все, что я могу, тем не менее - это показать, как с легкостью преобразовать сложные объявления паскаля в С++. Давайте предположим, например, что у вас есть модуль Delphi, (очевидно, несколько упрощенный для данного примера), который выглядит следующим образом: unit TestUnit; Даже без знания паскаля вы, вероятно, можете справиться с конвертацией этого модуля вручную. Тем не менее, вы можете получить преимущество, используя компилятор паскаля C++Builder'а для создания заголовочного файла для этого модуля. Вы могли бы добавить этот модуль в приложение C++Builder'а и его откомпилировать, но вы можете также использовать компилятор из командной строки. Вот последовательность действий: Откройте окно командной строки и перейдите к папке, содержащей модуль Delphi. В командной строке наберите: "dcc 32 - jphn TestUnit.pas" (без кавычек). DCC32.EXE - это компилятор паскаля. Ключ -jphn сообщает компилятору о необходимости создать заголовочный и объектный файлы, совместимые с C++Builder. По завершению исполнения данной команды будет откомпилирован исходный файл на паскале и будут созданы заголовочный и объектный файлы (объектный файл в данном случае не является значимым, поскольку вы все равно не собираетесь его использовать). Заголовок, сгенерированный для тестового модуля, будет иметь следующий вид (строки комментариев удалены для ясности): #ifndef TestUnitHPP Текст немного замусорен различными опциями компилятора, но вот существенная часть: enum MyEnum {meOne, meTwo, meThree}; Заметьте, как для вас удобно преобразованы объявления. Вы все еще должны преобразовать настоящий код в модуле, но, по крайней мере, объявления преобразовали за вас. Вот другой пример, только немного сложнее: const Сгенерированные объявления выглядят следующим образом: typedef double TDoubleArray[268435455]; Предыдущие примеры довольно просты. Некоторые объявления паскаля, однако, могут заставить вас почесать голову в удивлении, как преобразовать их в С++. Пример: TMyCallback = function(const S : string; Size : Integer) : Integer; Это объявление функции обратного вызова. Когда вы откомпилируете этот модуль компилятором паскаля, вы получите заголовок, который содержит следующее объявление: typedef int __fastcall (*TMyCallback) (const AnsiString S, int Size); Возможно, вы с легкостью поняли, как преобразовать код паскаля в это объявление, но это маловероятно, что вы эксперт и в паскале, и в С++. Дело, конечно, в том, что возможность генерации заголовка компилятором паскаля делает простым преобразование любого объявления в паскале в С++. Я могу предложить даже более сложные примеры, но, я думаю, вы уловили суть дела. Использование компонентов DelphiЕсть много условно-бесплатных и бесплатных компонентов, доступных для Delphi. В большинстве случаев, авторы компонентов не поставляют их эквивалент в C++Builder. Компоненты, поставляемые с исходным кодом на Delphi, обычно могут быть использованы с небольшой модификацией или вовсе без нее. Для использования компонента Delphi предпримите следующие шаги:
Предполагаю, что этот процесс прост, но многие программисты на C++Builder'е не представляют себе, что компоненты Delphi могут быть использованы подобным образом. ЗаключениеЧерез интернет доступно большое количество кода Delphi. Возможность использовать этот код в ваших приложениях - это, конечно, большое достоинство. Знание, что вы можете использовать этот код и знание, как его использовать - ключ к данному коду. |