尝试从 C# 调用 C++ dll 时出现格式不正确的异常

Posted

技术标签:

【中文标题】尝试从 C# 调用 C++ dll 时出现格式不正确的异常【英文标题】:Incorrect format Exception while trying to call C++ dll from C# 【发布时间】:2016-04-13 08:34:42 【问题描述】:

我正在使用 C# WPF。 我有一个 C++ 测试 dll 如下: .h:

extern "C" __delspec(dllexport) void TestMethod();

.cpp 文件:

extern "C"

    __delspec(dllexport) void TestMethod()
    
        MessageBox(0, L"Test", L"Test", MB_ICONINFORMATION);
    

C# 代码:

[DllImport("DllTest.dll", EntryPoint = "TestMethod")]
public static extern void TestMethod();

当我尝试调用 TestMethod 时出现异常:

an attempt was made to load a program with an incorrect format

我做错了什么? 谢谢!

【问题讨论】:

我有类似[DllImport("DllTest.dll", CallingConvention = CallingConvention.Cdecl)] 的东西。指定调用约定有帮助吗? 【参考方案1】:

这似乎是32bit/ 64 bit 问题。似乎您的 C++ dll 和 C# 调用程序集是为不同的平台目标构建的。尝试为同一平台(x86 或 x64)编译两者,然后调用该函数。

【讨论】:

谢谢!!!.. 我用另一个问题编辑我的帖子,如果我有多个函数,我需要替换什么 [DllImport("DllTest.dll", EntryPoint = "TestMethod" )] ? @Evyatar 最好将其作为单独的问题发布。我们更喜欢一个问题一个问题的格式:) @CompuChip,是的..我问了一个新问题:P

以上是关于尝试从 C# 调用 C++ dll 时出现格式不正确的异常的主要内容,如果未能解决你的问题,请参考以下文章

C#:加载 C++ DLL 时出现问题

使用 C# 访问非托管 C++ DLL 时出现 AccessViolationException

在 C# 中绑定 C++ dll 时出现 EntryPointNotFoundException

从 C# 调用 C++ 代码时出现 System.EntryPointNotFoundException

将数组移交给 C# 中动态加载的 C++ DLL 时出现 System.AccessViolationException

使用 MatLab dll 时出现 C++ 错误:找到一个或多个多重定义符号