为什么cl.exe不能生成有效的Windows模块?

时间:2009-08-24 07:18:15

标签: windows dll visual-c++ module cl.exe

我有一个简单的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

导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:0)

我正在链接一个LIB文件,其名称与编译器发出的LIB文件相同,因此它与自身链接。我刚刚将源文件的名称更改为ErlInterface.c。我认为链接器会在发生这种情况时发出警告,但事实并非如此。

无论如何,我现在可以在Dependency Walker中打开DLL,但我仍然无法在DllImport中使用它。不过,这是另一个问题。