| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > классы в dll |
| Автор: Romikgy 15.2.2006, 15:12 |
| Можно ли как то сделать чтобы можно было классы (объявление) засунуть в dll , а потом их брать юзать , наследовать? |
| Автор: chaos 15.2.2006, 15:31 |
| на счет наследовать сомневаюсь а вообще можно. Пример: технология COM |
| Автор: Romikgy 15.2.2006, 15:35 |
| по подробнее об этом где полистать? |
| Автор: Bose 15.2.2006, 15:40 |
| в DRKB и/или на DelphiKingdom |
| Автор: Snowy 15.2.2006, 15:43 |
| Юзай bpl. |
| Автор: Romikgy 15.2.2006, 15:54 |
| сиба посмотрим в чем отличие от dll у них? читал где то что это теже я... только в профиль? |
| Автор: Snowy 15.2.2006, 16:01 |
| Не совсем. Просто bpl можно переименовать в dll и юзать как обычную dll. Но если ее юзать, как bpl, то тогда можно использовать полностью весь их функционал. Например - поставь в настройках проекта "юзать bpl". Программка станет килов 20. Но тем не менее, она спокойно подключает rtl.bpl и VCL.bpl. Спокойненько достает оттуда TForm, создает его, достает TButton и т.д Ты можешь спокойно пронаследовать , который сидит в rtl.bpl, совершенно не заботясь, сто код класса сидит там, а не в твоей программе. Аналогично можешь построить свою bpl, расположить в ней класс, а в программе, хоть юзае его, хоть наследуй... Вобщем работай как обычно. |
| Автор: Romikgy 15.2.2006, 16:09 |
| А и доставать из нее классы и наследовать получится? Добавлено @ 16:10 Вообще то думалось создать dll понармальному , только с возможностью экспорта классов или это никак? |
| Автор: Romikgy 15.2.2006, 16:41 |
| Как с ним работать? точнее про заднии... если честно, мне не надо, попросили меня о помощи, я помогаю по мере сил Смысл помощи: есть исходник на С++ с классами , ф-циями... надо заюзать в дельфи эти классы? Добавлено @ 16:41 не переписывая исходник на дельфи, во! Добавлено @ 16:42 PS Интересная задача вот и взялся |
| Автор: Snowy 15.2.2006, 16:54 |
| Ну, если из C++, то тогда только COM. Само понятие структур разное. Напрямую никак не пронести. Можно еще написать объектную обертку для функций dll, а сами функции уже будут управлять объектом внутри dll. Но это как-то коряво. Но работать будет. |
| Автор: Romikgy 15.2.2006, 17:13 |
| Через можно только созавать объекты , а наследовать как? иль плохо искал? ну структуру можно подобрать схожую |
| Автор: Snowy 15.2.2006, 17:41 | ||
Только нужно правильно расписать интерфейс, пронаследовать до полноценного класса. После этого можешь наследовать класс дальше, как обычный класс Delphi. не выйдет. Разные типы данных. Разная адресация. Нокогда не попадешь. Нужно наводить мосты в виде функций и колбэков. Это не очень радостное занятие. Лучше для начала попробуй COM. Для этого его и создавали. |
| Автор: Romikgy 15.2.2006, 17:55 | ||
а пример такого чуда есть ? |
| Автор: Snowy 15.2.2006, 18:01 |
| Какой тут пример. Создаешь обычный интерфейс. Прописываешь в нем все методы класса, который в COM. Потом просто наследуешь класс от InterfacedPersistent и данного интерфейса. Получаешь нормальный человеческий класс. |
| Автор: Romikgy 16.2.2006, 14:56 |
| Это что вроде прочитал , все что видел , этого не встречал? |
| Автор: 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спабо за инфу Guedda, а разве dll относятся к |
| Автор: Snowy 16.2.2006, 16:04 |
| dll - Dynamic Link Library Полноценно юзать нельзя. Но, если реализовать COM, то на его базе вполне реально создать рабочий класс. (хорошо звучит - рабочий класс Если полноценно прописать интерфейс, то наследник будет вообще не отличим от класса дельфи. |
| Автор: <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 | ||||
На Visual C++ тоже нужно использовать расширенные MFC Dll ки которые не понимает делфи. А изнутри C++ объекты так вообще отличаются от делфийских. Потому кроме COM тут вообще нет вариантов.
Лучше этого вообще не делать без серьезных на то причин. Возни много. |