尝试从 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 时出现 AccessViolationException
在 C# 中绑定 C++ dll 时出现 EntryPointNotFoundException
从 C# 调用 C++ 代码时出现 System.EntryPointNotFoundException
将数组移交给 C# 中动态加载的 C++ DLL 时出现 System.AccessViolationException