gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:29:34 26 4
gpt4 key购买 nike

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

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

from PySide import QtNetwork

我收到以下错误:

dll load failed : the specified procedure could not be found

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

我使用 dependency walker 试图找出问题所在。
当应用程序启动时,它会加载 QtCore4.dll , QtGui4.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\ 目录中的 DLL)?
另外,为什么这种冲突与 QtCore 和 QtGui 无关?

最佳答案

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

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

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

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

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

希望对您有所帮助!

关于c++ - C++/Qt 应用程序中的 PySide DLL 加载冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13979752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com