3

我有一个使用 Qt 4.x 的核心、GUI 和网络模块的 C++ 应用程序。它在用户执行某些操作时调用 python 回调,重点是用户可以通过编写 python 代码来自定义这些回调。

当我尝试在这样的回调中从 PySide 导入 QtNetwork 模块时:

from PySide import QtNetwork

我收到以下错误

dll load failed : the specified procedure could not be found

请注意,当我导入 QtCore 和 QtGui 模块时,我没有收到错误消息。

我使用依赖walker试图找出问题所在。
当应用程序启动时,它会加载,QtCore4.dll它们是放置在我的应用程序目录中的C++ Qt DLL 。 当我触发从 PySide 导入 QtNetwork 的 python 代码的回调时,它会加载然后给我错误:QtGui4.dllQtNetwork4.dll
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 无关?

4

1 回答 1

1

首先,检查您是否QTNETWORK4.DLL满足要求:

  • 适合您的架构
  • 具有与您的 Qt 库相同的版本,使用女巫编译您的程序
  • 由同一个编译器编译

最好的方法是将你需要的库从 Qt 的bin目录复制到你的构建目录。

因此,我认为这种冲突仅与此冲突有关,QTNETWORK4.DLL因为该库具有其他版本(不满足上述要求)。

让它加载正确的 DLL 的方法是添加到pathQt 目录的环境变量路径bin,并从程序目录中删除 DLL - 因此,它可以从path.

希望能帮助到你!

于 2012-12-20T23:19:37.790 回答