У меня есть приложение C ++, которое использует модули Core, GUI и Network из Qt 4.x. Он вызывает обратные вызовы Python, когда пользователь выполняет определенные действия, суть в том, что пользователь может настроить эти обратные вызовы, написав код Python.
Когда я пытаюсь импортировать модуль QtNetwork из PySide в обратном вызове, как это:
from PySide import QtNetwork
Я получаю следующее ошибка :
dll load failed : the specified procedure could not be found
Обратите внимание, что я не получаю сообщение об ошибке при импорте модулей QtCore и QtGui.
я использовал ходок зависимости чтобы попытаться выяснить проблему.
Когда приложение запускается, оно загружается QtCore4.dll
, QtGui4.dll
а также QtNetwork4.dll
которые являются C ++ библиотеки Qt размещены в каталоге моего приложения.
Когда я запускаю обратный вызов моего кода Python, который импортирует QtNetwork из PySide, он загружается QtNetwork.pyd
а затем выдает мне ошибку:
LoadLibraryExA("C:\Dev\Python27\lib\site-packages\PySide\QtNetwork.pyd", 0x00000000, LOAD_WITH_ALTERED_SEARCH_PATH) returned NULL. Error: the specified procedure could not be found (127).
Мое дерево зависимостей QtNetwork.pyd
:
кажется, указывает на то, что он использует уже загруженные C ++ DLL вместо PySide. Я думаю, это потому, что их имена идентичны.
Есть ли способ заставить его загружать правильные библиотеки DLL (те, что в c:\dev\python27\lib\site_package\pyside\
каталог)?
Кроме того, почему этот конфликт не имеет значения с QtCore и QtGui?
Прежде всего, проверьте, если ваш QTNETWORK4.DLL
удовлетворить требования:
Лучший способ — просто скопировать нужные библиотеки из Qt’s bin
каталог к вашему каталогу сборки.
Итак, я думаю, что это конфликт имеет значение только с QTNETWORK4.DLL
потому что у этой библиотеки есть другая версия (не удовлетворяющая требованиям выше).
Способ заставить это загрузить правильные DLL это добавить к вашему path
путь переменной среды к вашему Qt bin
и удалите библиотеки DLL из каталога своих программ, чтобы он мог найти нужные библиотеки из path
,
Надеюсь, поможет!
Других решений пока нет …