Unity3D DllNotFoundException/System.DllNotFoundException

Unity System.DllNotFoundException

Unity Fallback handler could not load library D:/91yGame/SparrowCD_Data/Mono/.\D:/91yGame/SparrowCD_Data/Plugins/GAME3D.dll

Unity3D Fallback handler could not load library D:/91yGame/SparrowCD_Data/Mono/.\D:/91yGame/SparrowCD_Data/Plugins/GAME3D.dll

 

Unity System.DllNotFoundException: D:/91yGame/SparrowCD_Data/Plugins/GAME3D.dll

Unity3D System.DllNotFoundException: D:/91yGame/SparrowCD_Data/Plugins/GAME3D.dll

Unity DllNotFoundException: D:/91yGame/SparrowCD_Data/Plugins/GAME3D.dll

Unity3D DllNotFoundException: D:/91yGame/SparrowCD_Data/Plugins/GAME3D.dll

筆者在開發完遊戲後,在絕大部分的客戶機都是正常運行的,但是某些玩家就是不能啓動遊戲。重新下載也一樣。這很可能和系統環境有些關係了,引用dll都是放在plugins的。

通過日誌發現 很多日誌都是上面的內容,Fallback handler could not load library,遊戲大廳c++通訊dll調用失敗了。

通過分析,可以明確:

1:GAME3D.dll在大部分機器可以調用,說明DLL函數正確導出。 

2:C#導入方法

    [DllImport(@"GAME3D", EntryPoint = "SetCallbackTemp", CharSet = CharSet.Ansi)]
    public extern static void CallGameSceneNew(DegOnGameSceneNew callBack);

    在大部分機器也是ok的,函數調用也是對的。

3:GAME3D.dll依賴其他dll,而在unity規定的Plugins中找不到依賴dll。或者說某些客戶端不能正常引用。

通過Depends查看,我們發現這個通訊dll依賴MFC90.dll MSVCR90.dll,MSVCP90.dll了。

在出現異常的機器上把這些dll複製到unity發現目錄下的Plugins下。再次啓動遊戲,一切正常了,虛擬機上也正常了。

這個問題在虛擬機上很容易出現,對於引用dll的項目,多多細心。

 

總結

原因1:報錯引起,運行不同平臺不同環境代碼運行的邏輯可能不一樣

原因2:庫的依賴關係,在運行代碼時依賴的庫可能沒有動態導入

原因3:庫的Unity導入設置不對,或者導入設置腳本有問題

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章