PySide — конфликт загрузки PySide DLL в приложении C ++ / Qt

У меня есть приложение 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 :
дерево зависимостей QtNetwork.pyd
кажется, указывает на то, что он использует уже загруженные C ++ DLL вместо PySide. Я думаю, это потому, что их имена идентичны.
Есть ли способ заставить его загружать правильные библиотеки DLL (те, что в c:\dev\python27\lib\site_package\pyside\ каталог)?
Кроме того, почему этот конфликт не имеет значения с QtCore и QtGui?

2

Решение

Прежде всего, проверьте, если ваш QTNETWORK4.DLL удовлетворить требования:

  • для вашей архитектуры
  • иметь ту же версию, что и ваши библиотеки Qt, используя сборку вашей программы
  • компилируется тем же компилятором

Лучший способ — просто скопировать нужные библиотеки из Qt’s bin каталог к ​​вашему каталогу сборки.

Итак, я думаю, что это конфликт имеет значение только с QTNETWORK4.DLL потому что у этой библиотеки есть другая версия (не удовлетворяющая требованиям выше).

Способ заставить это загрузить правильные DLL это добавить к вашему path путь переменной среды к вашему Qt bin и удалите библиотеки DLL из каталога своих программ, чтобы он мог найти нужные библиотеки из path,

Надеюсь, поможет!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]