Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1282274883
Гость
2010-08-20 07:28
2010.11.14
Подскажите простой компонент для рисования графика по точкам?


2-1282029505
03111978
2010-08-17 11:18
2010.11.14
Как прочитать данные из ячейки DBGRID


2-1282041589
Dmitriy
2010-08-17 14:39
2010.11.14
создание объекта в DLL


2-1282108236
George
2010-08-18 09:10
2010.11.14
DirectoryExists


15-1280996881
abun
2010-08-05 12:28
2010.11.14
Как программно отследить события





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский