我有一个简单的C DLL,它公开了静态库中的函数。 DLL编译没有错误,我可以在其上运行DUMPBIN来查看导出。但是,当我尝试在C#中使用DllImport
加载它时,它会说:
System.DllNotFoundException:无法加载DLL'ei.dll':找不到指定的模块。 (HRESULT异常:0x8007007E)。
肯定是在正确的目录中。所以,我读到尝试Dependency Walker可能是一个好主意,以防我需要包含其他东西。不幸的是,当我尝试在DW中打开我的DLL时,我得到了这个:
错误:至少有一个文件不是32位或64位Windows模块。
这是我的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 :(得分:0)
我正在链接一个LIB文件,其名称与编译器发出的LIB文件相同,因此它与自身链接。我刚刚将源文件的名称更改为ErlInterface.c。我认为链接器会在发生这种情况时发出警告,但事实并非如此。
无论如何,我现在可以在Dependency Walker中打开DLL,但我仍然无法在DllImport
中使用它。不过,这是另一个问题。