我有一个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.dll
,QtGui4.dll
和QtNetwork4.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
的依赖树:
似乎表明它使用已经加载的C ++ DLL 而不是PySide。我猜这是因为他们的名字相同
有没有办法让它加载正确的DLL(c:\dev\python27\lib\site_package\pyside\
目录中的那些)?
另外,为什么这场冲突与QtCore和QtGui不相关?
答案 0 :(得分:1)
首先,检查您的QTNETWORK4.DLL
是否满足要求:
最好的方法是将您需要的库从Qt的bin
目录复制到您的构建目录。
所以,我认为这个冲突只与QTNETWORK4.DLL
有关,因为这个lib有一些其他版本(不满足上面的要求)。
使其加载正确的DLL 的方法是添加到Qt的path
目录的bin
环境变量路径,并从程序目录中删除DLL - 所以,它可以从path
找到所需的库。
希望它有所帮助!