Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

создание объекта в 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- очень подробно расписано все что я сказал ранее


Наверх

Титульная страница Поиск, карта сайта Написать письмо