2012-02-16 110 views
3

如何在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);

圖像: exception screenshot

+0

可能明顯的問題,但是該dll當然實際存在? – 2012-02-16 23:12:40

+0

是的,它是存在的。事實上,如果嘗試添加引用,我選擇dll作爲目標。我面對這個錯誤:無法添加對c:\ ... \ reader.dll的引用 – john 2012-02-16 23:17:37

+1

您不能添加對dll的引用,因爲它不是.NET程序集。它與你的問題無關。 嘗試使用依賴關係Walker來調試您的問題http:// www。dependencywalker.com/ – Terkel 2012-02-16 23:21:07

回答

2

雖然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

1

如果它是它只是需要在同一文件夾作爲一個簡單的C DLL 。可執行程序。

+0

謝謝cookey,已經試過這個,但它沒有工作 – john 2012-02-16 23:12:34

+0

它的一個visual C++ 6.0 DLL。 – john 2012-02-16 23:22:02

9

如果問題確實是「找不到」,那麼使用Sysinternals的ProcMon會向您顯示系統正在查找DLL的位置。

但是,通常這些類型的異常意味着「我找到了DLL但我無法加載它」,這可能是因爲DLL的依賴關係丟失而不是DLL本身,或者因爲DLL不兼容與應用程序試圖加載它。如果您的C#應用​​程序設置爲「任何CPU」,並且您位於64位計算機上,則加載非託管32位DLL時會出現此類錯誤。

解決問題的一種方法是創建一個加載DLL的簡單C/C++項目。 (如果您無權訪問導入庫,請使用LoadLibrary動態加載它。)然後使用Dependency Walker分析測試工具,並報告缺少的DLL的名稱。

+0

謝謝你@我會在64位機器上,調試是爲'x86'設置的。它是一個可視化的C++ 6.0 DLL,運行依賴關係的步行者顯示2缺少DLL:GPSVC.dll和IESHIMS.DLL。有任何想法嗎? – john 2012-02-16 23:47:40

+0

@john你有沒有得到這個解決?我遇到了同樣的事情,可以使用一些更多的想法來調試。謝謝! (GPSVC.dll和IESHIMS.DLL) – M3NTA7 2012-05-03 22:04:56

+1

@ M3NTA7請檢查我接受的答案。 GPSVC.dll和IESHIMS.DLL不是問題。在我的情況下,這是一個x64/x86問題。作爲想法的 :檢查你的dll是否在調試文件夾中。把你的項目編譯爲x86(也許你不需要使用coreflags,像x86一樣運行就可以完成這項工作)。 – john 2012-05-04 08:31:38