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