Я делаю плагин VST audio в одиночку с автономным исполняемым файлом, оба используют большую часть кода, и я пытаюсь создать всплывающее окно с помощью Qt Quick.
В самом начале я скопировал библиотеки Qt DLL из папки установки bin
в папку моих бинарников, но НЕ ничего не копировал из папок plugins
и qml
. Всплывающее окно корректно работает в exe-версии; но для версии VST утверждается, что DLL для QtQuick.Controls
не может быть загружена. Некоторые выходные данные отладки для Visual Studio приложены ниже:
“vsthost.exe”(Win32): 已加载“D:\development\Qt\5.10.1\msvc2017_64\qml\QtQuick\Controls.2\qtquickcontrols2plugind.dll”。已加载符号。
“vsthost.exe”(Win32): 已卸载“D:\development\Qt\5.10.1\msvc2017_64\qml\QtQuick\Controls.2\qtquickcontrols2plugind.dll”
file:///D:/my_project_folder/ParamPopForm.ui.qml:2:1: plugin cannot be loaded for module "QtQuick.Controls": Cannot load library D:\development\Qt\5.10.1\msvc2017_64\qml\QtQuick\Controls.2\qtquickcontrols2plugind.dll: (some messy broken characters)
import QtQuick.Controls 2.3
^
windows\dwm\dwmapi\attribute.cpp(92)\dwmapi.dll!00007FFC62FC594E: (caller: 00007FFC62D8071A) ReturnHr(31) tid(79c) 80070006 句柄无效。
windows\dwm\dwmapi\attribute.cpp(92)\dwmapi.dll!00007FFC62FC594E: (caller: 00007FFC62D8071A) ReturnHr(32) tid(79c) 80070006 句柄无效。
windows\dwm\dwmapi\attribute.cpp(92)\dwmapi.dll!00007FFC62FC594E: (caller: 00007FFC62D8071A) ReturnHr(33) tid(79c) 80070006 句柄无效。
windows\dwm\dwmapi\attribute.cpp(92)\dwmapi.dll!00007FFC62FC594E: (caller: 00007FFC62D8071A) ReturnHr(34) tid(79c) 80070006 句柄无效。
windows\dwm\dwmapi\attribute.cpp(92)\dwmapi.dll!00007FFC62FC594E: (caller: 00007FFC62D8071A) ReturnHr(35) tid(79c) 80070006 句柄无效。
windows\dwm\dwmapi\attribute.cpp(92)\dwmapi.dll!00007FFC62FC594E: (caller: 00007FFC62D8071A) ReturnHr(36) tid(79c) 80070006 句柄无效。
Странно, DLL уже была загружена, но вдруг выгрузилась
После некоторых усилий я обнаружил, что windeployqt
соберет все, что вам нужно для запуска программы Qt. Затем я запускаю его с помощью:
D:\development\Qt\5.10.1\msvc2017_64\bin\windeployqt.exe -qmldir D:\projects\my_dir_containing_qml_file MyVstPlugin.dll
После этой операции стало еще хуже: теперь ни exe, ни VST не могут найти платформенную DLL. Однако я вижу, что файл DLL платформы находится только в platforms/qwindowsd.dll
, в том же каталоге, что и другие собранные файлы Qt DLL.
Кроме того, я обнаружил, что Qt5Cored.dll изменен windeployqt
, так как время модификации изменено. И я нашел вариант --no-patchqt
не патчить библиотеку Qt5Core. Для чего используется патч?
d
, который является отладочной версией. Есть ли версия, отличная отd
, и/или вы пытаетесь запустить/развернуть отладочную версию вашей exe/плагина dll? Как правило, для Windows вам просто нужны используемые библиотеки Qt DLL в той же папке, что и двоичный файл программы, а затем подпапки плагинов прямо под ней. Обычно никакой другой магии не требуется. - person Maxim Paperno   schedule 18.02.2019plugins
находятся в одной папке моей DLL. - person jiandingzhe   schedule 19.02.2019plugins
находятся в одной папке с моим двоичным файлом. - person jiandingzhe   schedule 19.02.2019plugins
находилось в той же папке, что и двоичный файл, а не сама фактическая папкаplugins
. Так, например, папкаplatforms
находится на том же уровне, что и двоичный файл (и основные библиотеки DLL Qt). Должно быть<bin folder>\platforms\qwindowsd.dll
(что я думаю, что это то, что у вас есть, но просто чтобы убедиться). Вы также можете проверить свой exe/dll с помощью инструмента анализа зависимостей, например.depends.exe
, который поставляется с некоторыми Windows SDK/инструментами разработки, или что-то вроде dependencywalker.com . - person Maxim Paperno   schedule 19.02.2019platforms
находится в том же каталоге, что и мои двоичные файлы. Также я добавил более подробную информацию к моему вопросу. - person jiandingzhe   schedule 19.02.2019windeployqt
документы говорят: жестко заданные локальные пути в Qt5Core.dll заменены относительными. Изучаем код и code, он заменяетqt_prfxpath=<abs path to qt install>
наqt_prfxpath=.
. Но зачем это сделано, я не знаю. Я развернул большинство приложений Qt безwindeployqt
, и у меня не было проблем. - person Maxim Paperno   schedule 19.02.2019