2009-08-24 16 views
0

我有一個簡單的C DLL,它公開了靜態庫中的函數。該DLL編譯沒有錯誤,我可以在其上運行DUMPBIN查看導出。然而,當我試圖用C#DllImport加載它,它說的:cl.exe爲什麼不生成有效的Windows模塊?

System.DllNotFoundException: Unable to load DLL 'ei.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E).

這是在正確的目錄,是肯定的。所以,我讀到,嘗試使用Dependency Walker可能是個好主意,以防我需要包含其他內容。不幸的是,當我嘗試打開我的DW DLL,我得到這個:

Error: At least one file was not a 32-bit or 64-bit Windows module.

這裏是我的cl命令:

set ERL_INTERFACE_DIR=C:\Progra~1\erl5.7.2\lib\erl_interface-3.6.2\ 
call vcvars32.bat 
cl /I%ERL_INTERFACE_DIR%include /LD ei.c ei.lib Ws2_32.lib /link /LIBPATH:%ERL_INTERFACE_DIR%lib 

可能是什麼造成的?

+0

更好地顯示依賴關係者的輸出(模塊列表)。 – EFraim 2009-08-24 07:23:45

+0

EI.DLL < - 這是唯一的一個。它旁邊有一個紅色圓圈。 – 2009-08-24 07:24:51

回答

0

我正在鏈接一個名稱與編譯器發出的LIB文件名稱相同的LIB文件,因此它與本身鏈接。我只是將我的源文件的名稱更改爲ErlInterface.c。如果發生這種情況,我會認爲鏈接器會發出警告或其他信息,但事實並非如此。

無論如何,我現在可以在Dependency Walker中打開DLL,但我仍然無法使用它與DllImport。不過,這是另一個問題。

相關問題