[英]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.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 。 我猜這是因為它們的名稱相同。
有沒有辦法使其加載正確的DLL( c:\\dev\\python27\\lib\\site_package\\pyside\\
目錄中的c:\\dev\\python27\\lib\\site_package\\pyside\\
)?
此外,為什么這種沖突與QtCore和QtGui無關緊要?
首先,檢查您的QTNETWORK4.DLL
滿足要求:
最好的方法是將所需的庫從Qt的bin
目錄復制到構建目錄。
因此,我認為此沖突僅與QTNETWORK4.DLL
因為此lib具有其他版本(不滿足上述要求)。
使其加載DLL的正確的方法是添加到您的path
到你的Qt環境變量路徑bin
從程序目錄中的目錄,並刪除DLL的-因此,它可以找到所需的庫path
。
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.