Здравствуйте, гость ( Вход | Регистрация )
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 |
то тоже создается несколько экземпляров? экземпляров данных - да, а экземпляр кода всегда один (для всех приложений)Я бы на твоём месте использовал бы один указатель на 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. А почему лучше, если не секрет? |
|
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, дальше работать просто через указатель на объект. | |
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 6.5.2024, 9:53 |