如何从C#windows应用程序项目调用C ++ DLL

问题描述 投票:3回答:1

我使用Visual Studio中的类库项目在C ++中创建了一个dll。我需要从C#应用程序中调用dll中的方法。

我知道有2个approches。一种是将dll项目引用添加到C#项目或使用DllExport来导出方法。但是当我尝试两种方式时,在运行时调用dll方法时总是会出现以下错误。

TestClient.exe中发生未处理的“System.BadImageFormatException”类型异常附加信息:尝试加载格式不正确的程序。 (HRESULT异常:0x8007000B)

我可以知道如何避免这个问题吗?

提前致谢!

c# exception visual-c++ dllimport
1个回答
5
投票

此错误意味着您尝试将32位DLL加载到64位进程或将64位DLL加载到32位进程中。在Windows上,DLL的位数必须与进程的位数相匹配才能正确加载。

您的本机DLL是32位还是64位?在您的C#项目构建设置中,您要定位哪个平台?如果您进入C#项目属性,则可以转到“构建”选项卡,将“平台目标”更改为特定类似x86或x64的内容,以匹配构建本机DLL的平台。

另一种方法是构建本机DLL以匹配C#应用程序的平台。但是,如果C#应用程序的平台是AnyCPU,它将在32位Windows上以32位运行,在64位Windows上以64位运行。因此,您需要32位和64位版本的本机DLL。

我建议将C#应用程序的平台设置为特定的(x86,x64),然后更改本机DLL的平台以匹配。

© www.soinside.com 2019 - 2024. All rights reserved.