crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 11.7.2025, 7:24