Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > классы в dll


Автор: Romikgy 15.2.2006, 15:12
Можно ли как то сделать чтобы можно было классы (объявление) засунуть в dll , а потом их брать юзать , наследовать?

Автор: chaos 15.2.2006, 15:31
на счет наследовать сомневаюсь а вообще можно. Пример: технология COM

Автор: Romikgy 15.2.2006, 15:35
Цитата(chaos @ 15.2.2006, 14:31 Найти цитируемый пост)
технология COM

по подробнее об этом где полистать?

Автор: Bose 15.2.2006, 15:40
в DRKB и/или на DelphiKingdom

Автор: Snowy 15.2.2006, 15:43
Цитата(Romikgy @ 15.2.2006, 15:12 Найти цитируемый пост)
Можно ли как то сделать чтобы можно было классы (объявление) засунуть в dll , а потом их брать юзать , наследовать?
Юзай bpl.

Автор: Romikgy 15.2.2006, 15:54
Цитата(Bose @ 15.2.2006, 14:40 Найти цитируемый пост)
в DRKB и/или на DelphiKingdom

сиба посмотрим
Цитата(Snowy @ 15.2.2006, 14:43 Найти цитируемый пост)
Юзай bpl.

в чем отличие от dll у них? читал где то что это теже я... только в профиль?

Автор: Snowy 15.2.2006, 16:01
Цитата(Romikgy @ 15.2.2006, 15:54 Найти цитируемый пост)
читал где то что это теже я... только в профиль?
Не совсем. Просто bpl можно переименовать в dll и юзать как обычную dll.
Но если ее юзать, как bpl, то тогда можно использовать полностью весь их функционал.
Например - поставь в настройках проекта "юзать bpl".
Программка станет килов 20. Но тем не менее, она спокойно подключает rtl.bpl и VCL.bpl.
Спокойненько достает оттуда TForm, создает его, достает TButton и т.д
Ты можешь спокойно пронаследовать , который сидит в rtl.bpl, совершенно не заботясь, сто код класса сидит там, а не в твоей программе.
Аналогично можешь построить свою bpl, расположить в ней класс, а в программе, хоть юзае его, хоть наследуй... Вобщем работай как обычно.

Автор: Romikgy 15.2.2006, 16:09
А
Цитата(Snowy @ 15.2.2006, 15:01 Найти цитируемый пост)
переименовать в dll

и доставать из нее классы и наследовать получится?
Добавлено @ 16:10
Вообще то думалось создать dll понармальному , только с возможностью экспорта классов или это никак?

Автор: Snowy 15.2.2006, 16:16
Нет, если переименовать в dll и работать, как с dll, то не получится smile
Только, если работать, как с bpl.

Цитата(Romikgy @ 15.2.2006, 16:09 Найти цитируемый пост)
Вообще то думалось создать dll понармальному , только с возможностью экспорта классов или это никак?
Можно, но только через задние перила.
По нормальному никак.
Один из вариантов: создаешь класс, а методы ему назначаешь из dll.
В dll же для каждого метода принимаешь на один параметр больше - указатель на Self.
Но это довольно странная затея.
А вообще зачем тебе dll?

Автор: Romikgy 15.2.2006, 16:41
Цитата(Snowy @ 15.2.2006, 15:16 Найти цитируемый пост)
Только, если работать, как с bpl.

Как с ним работать?
Цитата(Snowy @ 15.2.2006, 15:16 Найти цитируемый пост)
через задние перила.

точнее про заднии... smile

Цитата(Snowy @ 15.2.2006, 15:16 Найти цитируемый пост)
А вообще зачем тебе dll?

если честно, мне не надо, попросили меня о помощи, я помогаю по мере сил smile, не хватать маленько smile
Смысл помощи:
есть исходник на С++ с классами , ф-циями... надо заюзать в дельфи эти классы?
Добавлено @ 16:41
не переписывая исходник на дельфи, во!
Добавлено @ 16:42
PS Интересная задача вот и взялся smile

Автор: Snowy 15.2.2006, 16:54
Ну, если из C++, то тогда только COM.
Само понятие структур разное. Напрямую никак не пронести.
Можно еще написать объектную обертку для функций dll, а сами функции уже будут управлять объектом внутри dll. Но это как-то коряво. Но работать будет.

Автор: Romikgy 15.2.2006, 17:13
Через
Цитата(Snowy @ 15.2.2006, 15:54 Найти цитируемый пост)
только COM.

можно только созавать объекты , а наследовать как? иль плохо искал?
Цитата(Snowy @ 15.2.2006, 15:54 Найти цитируемый пост)
Само понятие структур разное

ну структуру можно подобрать схожую smile

Автор: Snowy 15.2.2006, 17:41
Цитата(Romikgy @ 15.2.2006, 17:13 Найти цитируемый пост)
можно только созавать объекты , а наследовать как? иль плохо искал?
Отчегож. И наследовать можно.
Только нужно правильно расписать интерфейс, пронаследовать до полноценного класса.
После этого можешь наследовать класс дальше, как обычный класс Delphi.

Цитата(Romikgy @ 15.2.2006, 17:13 Найти цитируемый пост)
ну структуру можно подобрать схожую
не выйдет. Разные типы данных. Разная адресация. Нокогда не попадешь.
Нужно наводить мосты в виде функций и колбэков.
Это не очень радостное занятие. Лучше для начала попробуй COM. Для этого его и создавали.

Автор: Romikgy 15.2.2006, 17:55
Цитата(Snowy @ 15.2.2006, 16:41 Найти цитируемый пост)
Только нужно правильно расписать интерфейс, пронаследовать до полноценного класса.
После этого можешь наследовать класс дальше, как обычный класс Delphi.

а пример такого чуда есть ?

Автор: Snowy 15.2.2006, 18:01
Какой тут пример.
Создаешь обычный интерфейс. Прописываешь в нем все методы класса, который в COM.
Потом просто наследуешь класс от InterfacedPersistent и данного интерфейса.
Получаешь нормальный человеческий класс.

Автор: Romikgy 16.2.2006, 14:56
Цитата(Snowy @ 15.2.2006, 17:01 Найти цитируемый пост)
класс от InterfacedPersistent

Это что вроде прочитал , все что видел , этого не встречал?

Автор: Snowy 16.2.2006, 15:06
Лучше создай топик в Delphi: ActiveX/СОМ/CORBA.
Я в COM'ах не силен. Поэтому и не модерю этот раздел.
Там тебе лучше объяснят.

Автор: Guedda 16.2.2006, 15:16
Я в книге какой-то читал, что невозможно полноценно юзать классы, которые находятся в RunTime Library.

Автор: Romikgy 16.2.2006, 15:56
Snowy, cgспабо за инфу smile
Guedda, а разве dll относятся к
Цитата(Guedda @ 16.2.2006, 14:16 Найти цитируемый пост)
RunTime Library.

smile

Автор: Snowy 16.2.2006, 16:04
dll - Dynamic Link Library
Полноценно юзать нельзя.
Но, если реализовать COM, то на его базе вполне реально создать рабочий класс.
(хорошо звучит - рабочий класс smile )
Если полноценно прописать интерфейс, то наследник будет вообще не отличим от класса дельфи.

Автор: <Spawn> 17.2.2006, 12:23
Ну этот вы уже перебираете... Наследовать от класса написаного на другом языке можно только в .NET(и то только при соблюдении CLS). С другими языками такая радость не пройдет. COM же оперирует интерфейсами, а не классами...

Автор: Snowy 17.2.2006, 12:40
А что мешает пронаследовать интерфейс?

Автор: <Spawn> 17.2.2006, 13:23
При наследовании интерфейса не наследуется физическая реализация его логики. Т.е. это просто скелет, работу которого ты сам должен расписать. Ни о каком наследовании реализации его логики там речи не идет.

Автор: Mu57Di3 20.2.2006, 11:56
Как я понял из вышесказанного ... что в DLL вообще нельзя запихивать классы. И нельзя просто написать заголовочный файл как в С++ и по человечески его использовать. А на С++ моно по человечески использовать класс из DLL?

Автор: Snowy 20.2.2006, 12:02
Нет. Dll для этого не предназначена.

Автор: Mu57Di3 20.2.2006, 13:15
Ну ваще зашибись а как мне класс отдать в использование Сишному программисту есть такая необходимость.

Автор: Guedda 20.2.2006, 13:18
В ActiveXе

Автор: Mu57Di3 20.2.2006, 13:46
Ну это уже извращение.

Автор: Guedda 20.2.2006, 14:04
Извини, по другому вряд ли получится...
Либо через COM делай

Автор: Mu57Di3 21.2.2006, 09:56
Вся идея работы это кроссплатформенность под Линуксом нет СОМ'а. Это класс для работы с ogg форматом через OpenAL

Автор: DeemA 31.5.2007, 08:13
Подскажите как использовать объект класа, обьявленого в ДЛЛ, в програме.

и еще Динамическая загрузка DLL как????(Примером)

Автор: MetalFan 31.5.2007, 08:43
DeemA, ты тему хоть сначала то прочитай. и создай свою отдельную.
полноценно использовать класс, объявленный в длл, нельзя. юзай интерфейсы.
по динамической загрузке примеров море.
ищи по LoadLibrary

Автор: Alexeis 31.5.2007, 09:33
Цитата(Mu57Di3 @  20.2.2006,  11:56 Найти цитируемый пост)
И нельзя просто написать заголовочный файл как в С++ и по человечески его использовать. А на С++ моно по человечески использовать класс из DLL?

  На Visual C++ тоже нужно использовать расширенные MFC Dll ки которые не понимает делфи. А изнутри C++ объекты так вообще отличаются от делфийских. Потому кроме COM тут вообще нет вариантов.

Цитата(DeemA @  31.5.2007,  08:13 Найти цитируемый пост)
Подскажите как использовать объект класа, обьявленого в ДЛЛ, в програме.

  Лучше этого вообще не делать без серьезных на то причин. Возни много.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)