[Заказ рекламы]

Вернуться   Форум ICQMAG.Ru > Компьютеры/Интернет > Программирование

Важная информация

Программирование C++ / C# / Delphi / PHP / Perl / MySQL

Ответ
 
Опции темы Опции просмотра
Старый 08.04.2010, 09:55   #1
 
Аватар для [Alien]
По умолчанию Использование кода 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'а:
  1. Создайте в C++Builder'е свой проект.
  2. Выберите "Add to Project" в панели C ++ Builder 'а или в меню.
  3. Выберите "Pascal unit" в типах файлов выпадающего списка диалогового окна открытия файлов.
  4. Выберите модуль Delphi для добавления в свой проект и нажмите OK.
  5. Перестройте свое приложение перед написанием кода, ссылающегося на модуль Delphi. Перестройка проекта создаст из модуля заголовок, который вы сможете включить в свое приложение.
  6. Выберите пункт "File | Include Unit Hdr…" в главном меню C++Builder 'а и добавьте форму Delphi в ваше приложение.
  7. Напишите код, который ссылается на модуль 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 предпримите следующие шаги:
  1. Создайте новый пакет для компонента. Обычно вы будете создавать пакет, который будет являться пакетом как времени выполнения, так и времени разработки.
  2. Добавьте исходный код компонента в пакет.
  3. Перестройте пакет и установите его.
Предполагаю, что этот процесс прост, но многие программисты на C++Builder'е не представляют себе, что компоненты Delphi могут быть использованы подобным образом.

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

Автор: kent reisdorph
Оригинал находится по адресу: [Ссылка заблокирована: Зарегистрируйтесь!]

Автор перевода: Т. Сорока
Источник: [Ссылка заблокирована: Зарегистрируйтесь!]
Offline   Ответить с цитированием
Ответ

Метки
c++builder, delphi


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ Сброс кода блокировки телефона! Ar4eee Мобилки, КПК 2 06.04.2011 16:41
[Delphi] Литература [Alien] Программирование 0 08.04.2010 10:00
Работа с потоками в Delphi [Alien] Программирование 0 08.04.2010 09:54


Текущее время: 22:31. Часовой пояс GMT +3.
 



|