原地址:http://hi.baidu.com/next2_me/item/3a70c1cc6b2fc6320931c622
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的項目,多多細心。