Schumi |
Отправлено: 17.07.2005, 19:49 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
Меня заинтересовала совместимость. И потому у меня 2 вопроса:
1) есть некий модуль (cpp,h), где реализованы некоторые функции в BCB. Как мне использовать эти функции в Delphi?
2) есть пакет,ну очень хороший. Но сделаны они для BCB6 и Delphi5-6-7, а я пишу на BCB5. Не знаю как их использовать. Я могу взять из Delphi5 bpl,но BCB еще нужны lib и bpi — как их добыть и для чего они нужны? Или их невозможно использовать?
|
|
Sl@Sh |
Отправлено: 18.07.2005, 03:26 |
|
Мастер участка
Группа: Участник
Сообщений: 383
|
Можно просто создать dll, а ёё потом использовать и в программе на Делфи и на Билдере.
|
|
romario |
Отправлено: 18.07.2005, 08:45 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
1. Примерно так
BCB:
int __fastcall Hello(char* HelloStr);
далее компилируешь свой модуль .cpp в объектный файл
DELPHI:
{$L MyModul.obj}
...
function Hello(HelloStr: PChar): Integer; external;
2. По поводу установки компонентов, если есть исходники, то я думаю проблем быть не должно |
|
AVC |
Отправлено: 18.07.2005, 09:00 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
По 1 встречался с такой проблемой.
Есть проект у которого части написаны на C и Delphi одновременно, основное на C. Для использования базовых функций C в модулях на pascal я создавал промежуточный файл "переходников" и давал его "делфисту".
Пример файла
CODE |
// void __fastcall IniFormRestore (TForm *frm, bool size, bool setstyle, const AnsiString &postfix)
procedure cpp_IniFormRestore(pfrm: TForm; setsize, setstile : boolean; var pfix: AnsiString);
external 'HcCommon.bpl'
name '@IniFormRestore$qqrp11Forms@TFormoorx17System@AnsiString';
procedure IniFormRestore(pfrm: TForm; setsize, setstile : boolean);
// void __fastcall FormCheckMinHW (Forms::TForm *, int, int)
procedure FormCheckMinHW(pfrm: TForm; minH, minV: integer);
external 'HcCommon.bpl'
name '@FormCheckMinHW$qqrp11Forms@TFormii';
implementation
procedure IniFormRestore(pfrm: TForm; setsize, setstile : boolean);
var vname: AnsiString;
begin
vname := '';
cpp_IniFormRestore(pfrm, setsize, setstile, vname);
end;
|
Использование в Delphi
CODE |
procedure TfmMain.FormCreate(Sender: TObject);
begin
IniFormRestore(self, true, true);
end;
procedure TfmMain.FormResize(Sender: TObject);
begin
FormCheckMinHW(self,351,447);
end;
|
Так что оформление C-шных функций в виде библиотеки может вам помочь."Переходники", в основном, нужны для преобразования типов параметров из Delphi к C.
|
|
Schumi |
Отправлено: 18.07.2005, 18:41 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
QUOTE (romario @ 18/07/2005, 08:45) | По поводу установки компонентов, если есть исходники, то я думаю проблем быть не должно |
Не мог бы уточнить: к примеру, есть исходники от Delphi5, но толку от них, если я ничего не могу открыть. А по части BCB6 — так он начинает запрашивать такие вещи, которые есть только в BCB6.
|
|
romario |
Отправлено: 19.07.2005, 08:15 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
Создаешь пакет, подключаешь нужные pas-модули и другие пакеты, билдишь его, устанавливаешь в среду
Я сам сам только начал переходить на BCB c Delphi, так все компоненты с которыми в Дельфях работал, без проблем устанавливаю в BCB
Были конечно небольшие глючки, то BCB заголовки hpp кривые генерил, то пакеты какие-то ненужные к проекту подключал, но это ведь все ручками легко правиться... |
|
Schumi |
Отправлено: 19.07.2005, 18:19 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
Я как сделал: создал в bcb5 новый пакет и добавил туда все pas-файлы из пакета D5. Стал компилировать — после этого он стал требовать разные dcu, я их добавил, в смысле переписал в папку с новым пакетом. И после этого — он затребовал уже obj-файлы. Ясный, у меня их нет. Посмотрел в D5 — там есть одноименные файлы, но с расширением dcu. И как мне из них получить obj, или мой пакет bcb5 заставить использовать dcu, не знаю.
Самое интересное: смотрю а пакет на D5 — в нем используются типа pas-файлы, но их реально нет, а есть их dcu файлы, но он их подключает, и отсюда, наверное, проблемы в BCB5.
|
|
romario |
Отправлено: 20.07.2005, 11:10 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
Короче, ничего у тебя к сожалению не получиться, ибо нет исходников (pas) |
|
Schumi |
Отправлено: 20.07.2005, 19:28 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
Да... или надо переходить в bcb6 ...хотя надо ли?
|
|
romario |
Отправлено: 21.07.2005, 09:33 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
На Delphi |
|
GIZMO |
Отправлено: 21.07.2005, 10:16 |
|
Машинист паровоза
Группа: Участник
Сообщений: 174
|
QUOTE (Schumi @ 20/07/2005, 19:28) | Да... или надо переходить в bcb6 ...хотя надо ли? |
Нет.
|
|
Schumi |
Отправлено: 21.07.2005, 19:02 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
Моя любовь к С++ не знает границ.
|
|
Sl@Sh |
Отправлено: 23.07.2005, 04:26 |
|
Мастер участка
Группа: Участник
Сообщений: 383
|
QUOTE (Schumi @ 21/07/2005, 19:02) | Моя любовь к С++ не знает границ. |
И правильно. В крайнем случае переходите на VC++.
|
|
Schumi |
Отправлено: 23.07.2005, 22:12 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
Хотел очень сильно извратиться: создал в bcb6 dll, где была всего одна функция: void CreateVcl(TForm *form) — в ней я динамически создавал все нужные вещи из супер-пупер пакета, который нельзя поставить под bcb5.
Потом создал exe в bcb5 и попытался выполнить ф-цию из длл.
Обломс — AV, видимо все же не судьба, жалко, хотя ведь обычные кнопочки и панельки создавать можно
|
|
Георгий |
Отправлено: 25.07.2005, 21:42 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
QUOTE (Schumi @ 23/07/2005, 23:12) | Хотел очень сильно извратиться: создал в bcb6 dll, где была всего одна функция: void CreateVcl(TForm *form) — в ней я динамически создавал все нужные вещи из супер-пупер пакета, который нельзя поставить под bcb5.
Потом создал exe в bcb5 и попытался выполнить ф-цию из длл.
Обломс — AV, видимо все же не судьба, жалко, хотя ведь обычные кнопочки и панельки создавать можно |
а выравнивание, declspec указали? |
|
Schumi |
Отправлено: 26.07.2005, 18:51 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
QUOTE | а выравнивание, declspec указали? |
Не совсем я понял... Ну в общем ф-цию в длл объявлял так:
CODE | extern "C" void __stdcall __export CreateVcl(TForm *form) |
А в exe грузил через LoadLibrary/GetProcAd..(не помню окончание)/FreeLibrary. Но если что, то функция начинала выполняться — вставлял ShowMessage,и застревал на первой строчке с new, где создавал элемент.
|
|