Среда, 14.04.2021, 13:26

null

Каталог статей

Главная » Статьи » Borland 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'а и его откомпилировать, но вы можете также использовать компилятор из командной строки. Вот последовательность действий: 

1. Откройте окно командной строки и перейдите к папке, содержащей модуль delphi.
2. В командной строке наберите: 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 // pascal unit 

#include // 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. Возможность использовать этот код в ваших приложениях - это, конечно, большое достоинство. Знание, что вы можете использовать этот код и знание, как его использовать - ключ к данному коду.


!!! Мой сайт переезжает, теперь вы можите скачать всё тоже самое на сайте ishodniki.info !!!


Категория: Borland C++ Builder | Добавил: admin (25.09.2008)
Просмотров: 1985 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Категории каталога
Borland C++ Builder [12]
Всё о Borland C++ Builder
Разное [5]
Всё что нет в других категориях
Форма входа
Поиск
Друзья сайта
Полезное
Узнай свой IP адрес


WMR-бонус от 0,01 до 0,20 WMR

Кошелек
Код Защитный код

Бонус предоставлен сервисом www.wmcasher.ru

Наш опрос
На каком сайте вы бы хотели скачивать исходники:
Всего ответов: 18
Copyright MyCorp © 2021 | Хостинг от uCoz
Rambler's Top100