繁体   English   中英

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

[英]PySide DLL loading conflict within a C++ / Qt application

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

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

from PySide import QtNetwork

我收到以下错误

dll load failed : the specified procedure could not be found

请注意,导入QtCore和QtGui模块时不会出现错误。

我使用了依赖项遍历器来尝试找出问题所在。
当应用程序启动时,它将加载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依赖树:
QtNetwork.pyd的依赖关系树 似乎表明它使用了已经加载的C ++ DLL而不是PySide DLL 我猜这是因为它们的名称相同。
有没有办法使其加载正确的DLL( c:\\dev\\python27\\lib\\site_package\\pyside\\目录中的c:\\dev\\python27\\lib\\site_package\\pyside\\ )?
此外,为什么这种冲突与QtCore和QtGui无关紧要?

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

  • 适用于您的建筑
  • 与您的Qt库具有相同的版本,使用Witch编译程序
  • 由同一编译器编译

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

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

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

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM