如何在C#項目無法加載DLL在C#
錯誤加載DLL:無法加載DLL「Reader.dll」:指定的模塊找不到。 (從HRESULT異常:0x8007007E)
代碼示例:
[DllImport("Reader.dll")] public static extern byte OpenReader(ref IntPtr hCom, byte LinkType, string com_port);
圖像:
如何在C#項目無法加載DLL在C#
錯誤加載DLL:無法加載DLL「Reader.dll」:指定的模塊找不到。 (從HRESULT異常:0x8007007E)
代碼示例:
[DllImport("Reader.dll")] public static extern byte OpenReader(ref IntPtr hCom, byte LinkType, string com_port);
圖像:
雖然reader.dll是無法加載GPSVC.dll和IESHIMS.DLL。 我設法讓它通過運行corflags上工作application.exe 命令應用現在被標記爲32位:
corflags application.exe /32bit+
版本:v4.0.30319
CLR頭:2.5
PE:PE32
個CorFlags:3
ILONLY:1
32BIT:1
簽名:0
如果問題確實是「找不到」,那麼使用Sysinternals的ProcMon會向您顯示系統正在查找DLL的位置。
但是,通常這些類型的異常意味着「我找到了DLL但我無法加載它」,這可能是因爲DLL的依賴關係丟失而不是DLL本身,或者因爲DLL不兼容與應用程序試圖加載它。如果您的C#應用程序設置爲「任何CPU」,並且您位於64位計算機上,則加載非託管32位DLL時會出現此類錯誤。
解決問題的一種方法是創建一個加載DLL的簡單C/C++項目。 (如果您無權訪問導入庫,請使用LoadLibrary動態加載它。)然後使用Dependency Walker分析測試工具,並報告缺少的DLL的名稱。
謝謝你@我會在64位機器上,調試是爲'x86'設置的。它是一個可視化的C++ 6.0 DLL,運行依賴關係的步行者顯示2缺少DLL:GPSVC.dll和IESHIMS.DLL。有任何想法嗎? – john 2012-02-16 23:47:40
@john你有沒有得到這個解決?我遇到了同樣的事情,可以使用一些更多的想法來調試。謝謝! (GPSVC.dll和IESHIMS.DLL) – M3NTA7 2012-05-03 22:04:56
@ M3NTA7請檢查我接受的答案。 GPSVC.dll和IESHIMS.DLL不是問題。在我的情況下,這是一個x64/x86問題。作爲想法的 :檢查你的dll是否在調試文件夾中。把你的項目編譯爲x86(也許你不需要使用coreflags,像x86一樣運行就可以完成這項工作)。 – john 2012-05-04 08:31:38
我在其他帖子中發現了這個。也許這會幫助你的情況
可能明顯的問題,但是該dll當然實際存在? – 2012-02-16 23:12:40
是的,它是存在的。事實上,如果嘗試添加引用,我選擇dll作爲目標。我面對這個錯誤:無法添加對c:\ ... \ reader.dll的引用 – john 2012-02-16 23:17:37
您不能添加對dll的引用,因爲它不是.NET程序集。它與你的問題無關。 嘗試使用依賴關係Walker來調試您的問題http:// www。dependencywalker.com/ – Terkel 2012-02-16 23:21:07