|
|
Важная информация |
Программирование C++ / C# / Delphi / PHP / Perl / MySQL |
|
Опции темы | Опции просмотра |
08.04.2010, 09:55 | #1 |
Использование кода Delphi в C++Builder
Использование кода Delphi в 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'а:
Преобразование кода Как вы можете заметить, добавление модуля Delphi в свой проект - это достаточно просто. Тем не менее, вы можете не захотеть использовать модуль Delphi таким образом. У вас могут, например, потребовать, чтобы весь ваш код был на C++. В этом случае вы будете должны перевести код паскаля в C++. Для меня не существует практического способа объяснить каждую деталь преобразования кода Delphi в C++. Все, что я могу, тем не менее - это показать, как с легкостью преобразовать сложные объявления паскаля в С++. Давайте предположим, например, что у вас есть модуль Delphi, (очевидно, несколько упрощенный для данного примера), который выглядит следующим образом: Код:
unit TestUnit; interface type MyEnum = (meOne, meTwo, meThree); function DoSomething(Value : MyEnum : string; var I : Integer; Buffer : array [0..255] of Char; implementation function DoSomething(Value : MyEnum) : string; begin case Value of meOne : Result := 'One'; meTwo : Result := 'Two'; meThree : Result := 'Three'; end; end; end. Откройте окно командной строки и перейдите к папке, содержащей модуль Delphi. В командной строке наберите: "dcc 32 - jphn TestUnit.pas" (без кавычек). DCC32.EXE - это компилятор паскаля. Ключ -jphn сообщает компилятору о необходимости создать заголовочный и объектный файлы, совместимые с C++Builder. По завершению исполнения данной команды будет откомпилирован исходный файл на паскале и будут созданы заголовочный и объектный файлы (объектный файл в данном случае не является значимым, поскольку вы все равно не собираетесь его использовать). Заголовок, сгенерированный для тестового модуля, будет иметь следующий вид (строки комментариев удалены для ясности): Код:
#ifndef TestUnitHPP #define TestUnitHPP #pragma delphiheader begin #pragma option push -w- #pragma option push -Vx #include <SysInit.hpp> // Pascal unit #include <System.hpp> // Pascal unit namespace Testunit { #pragma option push -b- enum MyEnum { meOne, meTwo, meThree }; #pragma option pop extern PACKAGE int I; extern PACKAGE char Buffer[256]; extern PACKAGE AnsiString __fastcall DoSomething(MyEnum Value); } /* namespace Testunit */ #if !defined(NO_IMPLICIT_NAMESPACE_USE) using namespace Testunit; #endif #pragma option pop // -w- #pragma option pop // -Vx #pragma delphiheader end. #endif // TestUnit Код:
enum MyEnum {meOne, meTwo, meThree}; int I; char Buffer[256]; AnsiString __fastcall DoSomething(MyEnum Value); Вот другой пример, только немного сложнее: Код:
const MaxSize = MaxLongInt; type TDoubleArray = array[0..(MaxSize div SizeOf(Double))-1] of Double; PDoubleArray = ^TDoubleArray; TIntArray = array[0..(MaxSize div SizeOf(Integer))-1] of Integer; PIntArray = ^TIntArray; Код:
typedef double TDoubleArray[268435455]; typedef double *PDoubleArray; typedef int TIntArray[536870911]; typedef int *PIntArray; Код:
TMyCallback = function(const S : string; Size : Integer) : Integer; Код:
typedef int __fastcall (*TMyCallback) (const AnsiString S, int Size); Я могу предложить даже более сложные примеры, но, я думаю, вы уловили суть дела. Использование компонентов Delphi Есть много условно-бесплатных и бесплатных компонентов, доступных для Delphi. В большинстве случаев, авторы компонентов не поставляют их эквивалент в C++Builder. Компоненты, поставляемые с исходным кодом на Delphi, обычно могут быть использованы с небольшой модификацией или вовсе без нее. Для использования компонента Delphi предпримите следующие шаги:
Заключение Через интернет доступно большое количество кода Delphi. Возможность использовать этот код в ваших приложениях - это, конечно, большое достоинство. Знание, что вы можете использовать этот код и знание, как его использовать – ключ к данному коду. Автор: kent reisdorph Оригинал находится по адресу: [Ссылка заблокирована: Зарегистрируйтесь!] Автор перевода: Т. Сорока Источник: [Ссылка заблокирована: Зарегистрируйтесь!] |
|
Offline |
Метки |
c++builder, delphi |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
Опции просмотра | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
FAQ Сброс кода блокировки телефона! | Ar4eee | Мобилки, КПК | 2 | 06.04.2011 16:41 |
[Delphi] Литература | [Alien] | Программирование | 0 | 08.04.2010 10:00 |
Работа с потоками в Delphi | [Alien] | Программирование | 0 | 08.04.2010 09:54 |