![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: нет Всего: 27 |
Всем привет.
Нужно использовать классы, написанные на Delphi, в Builder c++. Как это можно сделать без переписывания кода? Я так понимаю, что DLL не может экспортировать классы, а тогда как? Спасибо |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Берёте и используете. C++ Builder может компилировать pas-файлы Delphi. И структура классов у них одна и та же.
DLL классы экспортировать может, но надо понимать, что этим вы жёстко привязываетесь к компилятору (иногда - к конкретной версии компилятора). Если ищите универсальности - используйте вместо классов интерфейсы. Добавлено через 1 минуту и 3 секунды Возможно, вам будет интересно это (и далее по ссылкам). -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: нет Всего: 27 |
Спасибо за ссылку, обязательно почитаю. А на счет компиляции pas в Builder хочу уточнить: 2009й откомпилит пасы Delphi7? И как вообще их там компелировать?
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Как базовый механизм Windows не может, но C++ (MSVC) прекрасно умеет экспортировать классы в Dll, просто каждый метод экспортируется как функция, в экзешнике подставляются адреса этих функций так как будто они родные. В Delphi такого механизма нет, его заменили механизмом bpl. Возможно экспортируемые классы в bpl Delphi будут понятны билдеру, но должна соответствовать версия VCL, т.е. Builder 2006/Delphi 2006 . Такой механизм не гарантируется производителем, но теоретически может работать. Правильнее всего
Ну или COM... -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: нет Всего: 27 |
Alexeis, мне нужно использовать не VCL классы, а обычные написанные мной (например для работы с математикой), я так понял, что их можно запихнуть в bpl, а builder вытащить? А если версия Builder старше?
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
В Delphi все наследуется от TObject, в С++ Builder изначально не наследуется от TObject, поэтому боюсь чтобы использовать в программе на билдере, придется написать маленький pas модуль на паскале для билдера. У билдера есть директива PascalImplementation, которая и обеспечивает совместную компиляцию с делфийскими классами. Впринципе, TObject мало меняется от версии к версии, но у них (bpl и exe) должна быть общая RTL библиотека времени исполнения, вот она скорее всего и не подойдет. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: нет Всего: 27 |
Увидел, что PascalImplementation действительно используется повсюду д Билдере. Только вот не могу понять сам принцип.
Alexeis, знаешь как ей пользоваться? То есть мне нужно dcu подсунуть как-то или pas или чё? |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Если вы что-то откомпилите 2009м, то и воспользоваться можете только им - там сильно TObject поменялся. Вообще, если чувствуете, что плаваете в этой теме - лучше бы всё же использовать интерфейсы, а то такого наворотите, что сами испугаетесь (а уж отлаживать эти баги потом...).
Добавлено через 3 минуты и 6 секунд 2Alexeis: Признаться, я вопрос прочитал как "function GetClass: TMyClass; external 'MyLib.dll';". В любом случае, bpl - это те же DLL, только что с Initialize/Finalize. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: нет Всего: 27 |
Та да, плаваю, потому, что первый раз приходится совмещать работу разных программистов.
Ладно, всем спасибо, буду пытаться интерфейсами как-то всё замутить. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |