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導入設置不對,或者導入設置腳本有問題