![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
создание объекта в DLL [D7]
Dmitriy © (2010-08-17 14:39:00)Здравствуйте!
Занимаюсь вопросом поддержки плагинов в своем приложении. Интересует, можно ли создать объекты в DLL и использовать их в основном приложении. Если можно, то как?
Игорь Шевченко (2010-08-18 22:05:00) [1]~AQUARIUS~ © (18.08.10 21:53) [16]
Ты поищи статью-то. Занятно.
> В этом собственно и состоит тема спора
Спорить не о чем - некоторые объекты можно передавать между DLL и EXE, некоторые нельзя. Нельзя использовать проверку типов, так как переданный объект хранит указатель на отличную от имеющейся в модуле VMT, с памятью надо аккуратно обращаться, еще ряд нюансов есть, например, атомы у контролов разные, глобальные объекты разные, о чем-то сейчас могу не вспомнить, а примеры писать лень.
Но в целом, заявлять, что "ни за что, если не использовать run-time пакетов" хорошо для проповеди, а не для программирования.
Впрочем, и проповеди иной раз полезны :)
~AQUARIUS~ (2010-08-18 21:53:00) [2]
> Сходу: реализуем в dll интерфейс, в приложении его используем.
> Может и ещё как, через там объектник какой можно.
Да нетушки ;-) Надо именно обьект ;-) В этом собственно и состоит тема спора )
Ega23 (2010-08-17 22:37:00) [3]
> Договоримся ;-) Только условие - приложение - на Дельфи,
> длл - на С++, класс - с использованием множественного наследования.
> Идет? ;-)
Сходу: реализуем в dll интерфейс, в приложении его используем.
Может и ещё как, через там объектник какой можно.
Просто хочу напомнить:
> ~AQUARIUS~ © (17.08.10 14:55) [2]
>
> Нельзя, если не использовать пакеты (.bpl).
Leonid Troyanovsky (2010-08-17 22:23:00) [4]
> Игорь Шевченко © (17.08.10 21:54) [13]
> Ничего принципиально невозможного не вижу, биты - они независимы
> от языка.
Есть и принципиальные, независимые от языка, msdn.
--
Regards, LVT.
Игорь Шевченко (2010-08-17 21:54:00) [5]~AQUARIUS~ © (17.08.10 20:20) [12]
> У меня только один вопрос остается - насколько это стабильно?
> ;-)
Я странного не желал, поэтому в 1996 году поверил авторам статей в Dr. Bob's Journal
Ничего принципиально невозможного не вижу, биты - они независимы от языка.
~AQUARIUS~ (2010-08-17 20:20:00) [6]
> Игорь Шевченко © (17.08.10 20:12) [11]
> ~AQUARIUS~ © (17.08.10 20:04) [10] И это можно. Описывалось
> еще со времен Delphi 2
У меня только один вопрос остается - насколько это стабильно? ;-)
Игорь Шевченко (2010-08-17 20:12:00) [7]~AQUARIUS~ © (17.08.10 20:04) [10]
И это можно. Описывалось еще со времен Delphi 2
~AQUARIUS~ (2010-08-17 20:04:00) [8]
> Ega23
> А если я напишу код, где создаю объект некоего класса в
> рамках DLL, а в основном приложении его спокойно использую,
> то что мне за это будет?
Договоримся ;-) Только условие - приложение - на Дельфи, длл - на С++, класс - с использованием множественного наследования. Идет? ;-)
Ega23 (2010-08-17 19:50:00) [9]
> Мотивируйте. Свои аргументы я привел выше
А если я напишу код, где создаю объект некоего класса в рамках DLL, а в основном приложении его спокойно использую, то что мне за это будет?
Игорь Шевченко (2010-08-17 17:55:00) [10]~AQUARIUS~ © (17.08.10 17:23) [7]
> Мотивируйте.
Опыт пойдет в качестве мотива ?
~AQUARIUS~ (2010-08-17 17:23:00) [11]
> Ega23
> Я бы не стал вот так вот совсем категорично утверждать.
Мотивируйте. Свои аргументы я привел выше
Ega23 (2010-08-17 16:45:00) [12]
> ~AQUARIUS~ © (17.08.10 14:55) [2]
> Нельзя, если не использовать пакеты (.bpl).
Я бы не стал вот так вот совсем категорично утверждать.
Германн (2010-08-17 15:46:00) [13]
> если билдить с рантайм-пакетами, то все прекрасно знает
> и ничего не глючит
Тогда это ничем не лучше bpl.
Petr V. Abramov (2010-08-17 15:44:00) [14]
> Видите ли, библиотека - это отдельная от исполняемого файла
> сущность; в ней есть отдельные копии того, что есть в ехе,
> в том числе и RTTI. Ехе не знает об RTTI библиотеки, и
> наоборот.
если билдить с рантайм-пакетами, что все прекрасно знает и ничего не глючит, единственно, все созданные в dll объекты должны быть мануально :) уничтожены ДО выгрузки dll, иначе AV при закрытии программы.
с остальным согласен.
Dennis I. Komarov (2010-08-17 14:55:00) [15]длл бывают разные, да и объекты тоже...
и создавать можно, и использовать можно...
12 (2010-08-17 14:55:00) [16]не стоит так делать лучше, имхо 6)
но как-то раз делал так
create в dll, передаем указатель, по указателю приравниваем
глюков м.б. - много
~AQUARIUS~ (2010-08-17 14:55:00) [17]Нельзя, если не использовать пакеты (.bpl). Видите ли, библиотека - это отдельная от исполняемого файла сущность; в ней есть отдельные копии того, что есть в ехе, в том числе и RTTI. Ехе не знает об RTTI библиотеки, и наоборот. Кроме того, если компилировать обе части разными компиляторами, нет гарантии что они сохранят ту же последовательность полей и методов. Плюс остется вопрос, что же делать с компиляторами других языков (например, тот же С++ поддерживает множественное наследование, а в Дельфи такого даже в помине нет. Как прикажете использовать такие обьекты?). Пакеты некоторым образом решают первые две проблемы, а так же некоторые другие, которые появляются при попытке использовать VCL в библиотеке. Но они так же делают очень жесткую привязку к языку и даже к конкретной версии компилятора. Как альтернативу можно еще предложить использовать интерфейсы. Думаю вам интересно будет почитать это: http://www.gunsmoker.ru/2008/12/1.html- очень подробно расписано все что я сказал ранее