【问题标题】:Why isn't cl.exe producing a valid Windows module?为什么 cl.exe 不生成有效的 Windows 模块?
【发布时间】:2009-08-24 23:00:20
【问题描述】:

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

这可能是什么原因造成的?

【问题讨论】:

  • 更好地显示依赖walker的输出(模块列表)。
  • EI.DLL

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 2013-02-16
    • 2022-11-26
    • 1970-01-01
    相关资源
    最近更新 更多