2016-01-26 28 views
-1

我見過幾個有類似問題的人,但到目前爲止,沒有任何修復工作。我有一個C#應用程序(Windows窗體)和/我想要使用C + + clr dll。 DLL似乎加載得很好,我可以構建和運行應用程序,但是如果我調用dll程序會拋出FileNotFound異常「無法加載文件或程序集」MyLibrary.dll「或它的某個依賴項。未找到。「:」MyLibrary.dll「。無法從C#運行C++ clr dll - Dll Unloaded?

的最後一個錯誤是1008,ERROR_NO_TOKEN

該DLL與EXE的文件夾中。

我一直在用peverify和ildasm來檢查事情,但沒有發現任何問題。

我跑的Dependency Walker就可以看到在日誌這個不尋常的序列:

地址0x00007FFB93400000卸載「MYLIBRARY.DLL」。 LoadLibraryExW(「C:\ source \ tools \ ToolItemProj \ ToolItem \ ToolItem \ bin \ x64 \ Debug \ MyLibrary.dll」,0x0000000000000000,LOAD_WITH_ALTERED_SEARCH_PATH)返回NULL。錯誤:指定的模塊找不到(126)。我已經運行了ProcMon並且拿出了幾個entires,其中大部分都成功了,但QuerryAllInformation有一個BufferOverflow錯誤,並且CreateFileMapping失敗(一次)使用FileLockedWithOnlyReaders(然後再次運行併成功運行)。使用NameNotFound創建一個INI似乎也失敗了。

因此,它看起來像是因爲緩衝區溢出而在運行時卸載dll。但是,我如何追蹤它?有人對此有經驗嗎?

+1

通常「找不到指定的模塊」暗示某些dll丟失。你的vcredist(x64)是否正確安裝? C++ dll是否依賴於任何你可能忘記放在你的程序集目錄或搜索路徑下的東西?此外,是C++ DLL編譯在X64? – evertqin

回答

-1

這已經解決了。該DLL包含另一個我沒有的DLL。我能夠通過原始開發人員跟蹤這個DLL。

+0

對於這種情況,「Dependency Walker」工具是無價的。它帶有許多版本的Windows SDK(以前稱爲Platform SDK),也可以在http://www.dependencywalker.com上單獨獲得。你說你已經運行了它......我建議不要只看日誌,而是在它在您打開DLL時執行的靜態分析。它將讀取導入列表,並告訴您哪些DLL是必需的但未找到,並向您顯示發現的版本信息(如果版本不匹配是您的問題)。 –