簡體   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