在 C# 中调用C++ DLL 库中导出的函数

Call exported functions from C++ DLL library in C#

本文关键字:函数 DLL 调用 C++      更新时间:2023-10-16

我使用动态链接从 C# 调用C++ DLL 函数没有问题,但是当我尝试以动态方式调用它时遇到了问题:

尝试获取 DLL 处理程序:

var DLL = Assembly.LoadFile(@"C:projectmydll.dll");

并得到例外:

mscorlib 中发生了类型为"System.BadImageFormatException"的未处理异常.dll

其他信息:模块应包含程序集清单。(HRESULT的例外:0x80131018(

如何解决这个问题?

Assembly.LoadFile 用于加载 .NET 程序集,它不能加载不包含程序集的 DLL。

需要使用 PInvoke 来访问 DLL 中的函数。此外,您需要确保导出函数的名称不会被破坏,因为几乎不可能确定函数名称是什么,并且当使用不同版本的C++编译器构建时,名称可能会更改。

Assembly.LoadFile只应用于加载 .NET 程序集。纯 Win32 dll 不能以这种方式加载。

为了在托管代码中加载 Win32 库,请使用通过 PInvoke 的 LoadLibrary Win32 调用。