为什么在我的机器上加载dll总是失败

Why is loading dll on my machine consistently failing

提问人:rejkid 提问时间:11/11/2023 最后编辑:rejkid 更新时间:11/11/2023 访问量:49

问:

我正在尝试学习如何从应用程序中调用方法。我将 c 和 c# 作为 64 位版本运行。 我正在关注此 Microsoft 文章链接 - 示例 2。cdllc#

当我运行(见下文)时 - 我收到错误:cm.exe

Unhandled Exception: System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

简而言之,c dll只包含以下代码:

// cmdll.c
// Compile with: -LD ("cl -LD cmdll.c")
int __declspec(dllexport) SampleMethod(int i)
{
  return i*10;
}

C# 可执行文件与 c dll 并置,如下所示:

// cm.cs (compile with "csc cm.cs")
using System;
using System.Runtime.InteropServices;
public class MainClass
{
    [DllImport("Cmdll.dll")]
      public static extern int SampleMethod(int x);

    static void Main()
    {
        Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5));
    }
}

我做错了什么?这是怎么回事?

更新: 我现在已经设法将 cm 应用程序作为 64 位(从 Visual Studio 2022 中)运行,但我这次得到了System.DllNotFoundException: 'Unable to load DLL 'Cmdll.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)'

C# C DLL文件

评论

0赞 NineBerry 11/11/2023
这回答了你的问题吗?BadImageFormatException 在 C# 中使用 C++ .dll 函数时出错?
0赞 NineBerry 11/11/2023
换句话说,您需要确保可执行文件和 dll 都面向同一平台,例如,它们都应该面向 x86 或 x64,以便 exe 可以加载 dll。
0赞 rejkid 11/11/2023
我摆脱了异常,谢谢 - 现在我得到了BadImage...System.DllNotFoundException: 'Unable to load DLL 'Cmdll.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)'
0赞 NineBerry 11/11/2023
请编辑问题或创建一个新问题,并描述您现在在做什么不同。您的更改可能会导致 dll 被放置在您的 exe 找不到它的其他文件夹中。
0赞 NineBerry 11/11/2023
如果您使用的操作系统与 Windows 不同,则文件名的大小写拼写可能会起作用(Cmddll 与 cmddll)

答: 暂无答案