crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QLibrary. Загрузка оной библиотеки несколько раз
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Iron Bug Дата 26.1.2015, 12:18
  нет смысла загружать библиотеку несколько раз в одном приложении.
код всегда один, данные разделяются, если они не статические. статические данные всегда разделяются между всеми потоками одного процесса, использующими данные библиотеки.

P.S. не путайте потоки и процессы, это разные вещи.
lanz Дата 25.1.2015, 19:47
 
Цитата
экземпляров данных - да

Вот тут пишут, что каждый процесс получает свою копию данных, т.е. данные разделяются внутри одного процесса
https://msdn.microsoft.com/en-us/library/wi...4(v=vs.85).aspx
Litkevich Yuriy Дата 25.1.2015, 19:07
 
Цитата(MishaUA @ 25.1.2015, 21:02) *
то тоже создается несколько экземпляров?
экземпляров данных - да, а экземпляр кода всегда один (для всех приложений)

Я бы на твоём месте использовал бы один указатель на QLibrary, если по архитектурным соображениям это невозможно или затруднительно. То можно сделать класс "Одиночку" в качестве обёртки над Dll-кой и работать через него.

"Одиночка" гарантирует, что экземпляр некого класса будет существовать в количестве - Одна штука.
MishaUA Дата 25.1.2015, 19:02
  А если с одной проги загружаю несколько раз одну и ту же библиотеку, то тоже создается несколько экземпляров?
Litkevich Yuriy Дата 25.1.2015, 18:59
  MishaUA, тебя не должен настораживать факт, того, что Dll загружается один раз. Дело в том что это только исполняемая часть (машинные инструкции) существуют в памяти только в одном экземпляре. экземпляров данных будет столько сколько потребуется твоей программе.

Вряд ли ты задумываешся над тем, что exe-шник (в винде, разумеется) лежащий на диске является и файлом подкачки для него (отсюда ограничение в винде - когда ты не можешь удалить/переместить exe-файл пока он запущен).

Другими словами - не отвлекайся на реализацию работы Dll-ок, если, конечно, ты не пишешь свой механизм работы с ними.
MishaUA Дата 25.1.2015, 15:18
  потому что dll уже почти готова))) Да и смысла узать плагины не вижу, если в обычной dll есть всё что нужно
lanz Дата 25.1.2015, 15:13
  Ну плагин это тоже dll. :lol:

А почему лучше, если не секрет?
MishaUA Дата 25.1.2015, 12:48
  Знаю, но в моем случае лучше именно dll
lanz Дата 25.1.2015, 12:42
  В качестве альтернативы можно использовать
http://qt-project.org/doc/qt-4.8/qpluginloader.html
Цитата
A Qt plugin is stored in a shared library (a DLL) and offers these benefits over shared libraries accessed using QLibrary:
QPluginLoader checks that a plugin is linked against the same version of Qt as the application.
QPluginLoader provides direct access to a root component object (instance()), instead of forcing you to resolve a C function manually.
MishaUA Дата 25.1.2015, 5:05
  Вобщем, так и сделал, работает нормально. Сделал, правда, немного по-ином: создание qlibrari, вызов функции, которая создает и возвращает объект, наследуемый от базового класса, удаление qlibrari, дальше работать просто через указатель на объект.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 6.5.2024, 9:53