Я делаю аудио-плагин VST в одиночку с отдельным exe-файлом, оба разделяют большую часть кода, и я пытаюсь создать всплывающее окно, используя Qt Quick.
В самом начале я скопировал DLL-библиотеки Qtиз папки установки 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
, в том же каталоге других собранных файлов DLL Qt.
Кроме того, я обнаружил, что файл Qt5Cored.dll изменен на windeployqt
, так как егоВремя мода изменено.И я нашел вариант --no-patchqt
, чтобы не исправлять библиотеку Qt5Core.Для чего используется исправление?