PySide DLL在C ++ / Qt应用程序中加载冲突

时间:2012-12-20 20:13:41

标签: c++ python qt dll pyside

我有一个C ++应用程序,它使用Qt 4.x的Core,GUI和Network模块。当用户执行某些操作时,它会调用python回调,关键是用户可以通过编写python代码来自定义这些回调。

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

from PySide import QtNetwork

我收到以下错误

dll load failed : the specified procedure could not be found

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

我使用依赖性walker 来试图找出问题 应用程序启动时,会加载QtCore4.dllQtGui4.dllQtNetwork4.dll这些 C ++ Qt DLL 放在我的应用程序目录中。
当我触发从PySide导入QtNetwork的python代码的回调时,它会加载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的依赖树:
dependency tree of QtNetwork.pyd 似乎表明它使用已经加载的C ++ DLL 而不是PySide。我猜这是因为他们的名字相同 有没有办法让它加载正确的DLL(c:\dev\python27\lib\site_package\pyside\目录中的那些)?
另外,为什么这场冲突与QtCore和QtGui不相关?

1 个答案:

答案 0 :(得分:1)

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

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

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

所以,我认为这个冲突只与QTNETWORK4.DLL 有关,因为这个lib有一些其他版本(不满足上面的要求)。

使其加载正确的DLL 的方法是添加到Qt的path目录的bin环境变量路径,并从程序目录中删除DLL - 所以,它可以从path找到所需的库。

希望它有所帮助!