(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Использование кода 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'е свой проект.
  • Выберите "Add to Project" в панели C ++ Builder 'а или в меню.
  • Выберите "Pascal unit" в типах файлов выпадающего списка диалогового окна открытия файлов.
  • Выберите модуль Delphi для добавления в свой проект и нажмите OK.
  • Перестройте свое приложение перед написанием кода, ссылающегося на модуль Delphi. Перестройка проекта создаст из модуля заголовок, который вы сможете включить в свое приложение.
  • Выберите пункт "File / Include Unit Hdr…" в главном меню C++Builder 'а и добавьте форму Delphi в ваше приложение.
  • Напишите код, который ссылается на модуль Delphi.

Когда вы перестраиваете приложение, C++Builder использует встроенный компилятор паскаля для создания obj -файла, который приложение сможет использовать. Компилятор паскаля также создает заголовочный файл из исходного текста. Использование этого способа подключения модулей Delphi совсем несложно.

Преобразование кода

Как вы можете заметить, добавление модуля 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.

Даже без знания паскаля вы, вероятно, можете справиться с конвертацией этого модуля вручную. Тем не менее, вы можете получить преимущество, используя компилятор паскаля C++Builder'а для создания заголовочного файла для этого модуля. Вы могли бы добавить этот модуль в приложение C++Builder'а и его откомпилировать, но вы можете также использовать компилятор из командной строки. Вот последовательность действий:

Откройте окно командной строки и перейдите к папке, содержащей модуль 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 предпримите следующие шаги:

  • Создайте новый пакет для компонента. Обычно вы будете создавать пакет, который будет являться пакетом как времени выполнения, так и времени разработки.
  • Добавьте исходный код компонента в пакет.
  • Перестройте пакет и установите его.

Предполагаю, что этот процесс прост, но многие программисты на C++Builder'е не представляют себе, что компоненты Delphi могут быть использованы подобным образом.

Заключение

Через интернет доступно большое количество кода Delphi. Возможность использовать этот код в ваших приложениях - это, конечно, большое достоинство. Знание, что вы можете использовать этот код и знание, как его использовать - ключ к данному коду.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 27.10.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Delphi Professional Named User
Enterprise Connectors (1 Year term)
TeeChart for .NET with source code single license
Microsoft 365 Apps for business (corporate)
EMS SQL Management Studio for InterBase/Firebird (Business) + 1 Year Maintenance
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Программирование в AutoCAD
СУБД Oracle "с нуля"
Краткие описания программ и ссылки на них
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100