C# 从C调用非托管C++ API的布尔类型等价 当调用C的非托管方法C++时,我得到了SytPooPositNojdExtPosits。

C# 从C调用非托管C++ API的布尔类型等价 当调用C的非托管方法C++时,我得到了SytPooPositNojdExtPosits。,c#,c++,marshalling,unmanaged,C#,C++,Marshalling,Unmanaged,下面是C语言中的函数声明++ 我在C中使用了下面的代码,这是我在搜索了一段时间后发现的。但我还是得到了同样的例外 [DllImport("UnmanagedDLL.dll")] private static extern void MethodA([MarshalAs(UnmanagedType.I1)] bool Flag); 我还尝试使用Byte、Boolean和int类型来代替bool,但我还是得到了相同的异常 请有人给我一个解决我问题的办法 提前谢谢 USER 27 944 77 见上

下面是C语言中的函数声明++

我在C中使用了下面的代码,这是我在搜索了一段时间后发现的。但我还是得到了同样的例外

[DllImport("UnmanagedDLL.dll")]
private static extern void MethodA([MarshalAs(UnmanagedType.I1)] bool Flag);
我还尝试使用Byte、Boolean和int类型来代替bool,但我还是得到了相同的异常

请有人给我一个解决我问题的办法

提前谢谢
USER 27 944 77

见上一篇文章:据我所知,不能直接调用C++ DLL中的函数,因为它们通过编译器名Mulgle得到新名称。您需要使用C++/CLI构建DLL,以便能够从其中的C调用函数或在函数声明中使用extern C。@οοö,更简单的方法是使用extern C。感谢@Tim的响应。我检查了那个链接,发现是名称mangling的问题。因此,我给EntryPoint取了与我在DLL的.lib文件中找到的相同的名称,它正在工作。非常感谢。添加extern C需要很多努力,我使用了lib文件中的确切名称作为入口点。成功了。谢谢@Joey
[DllImport("UnmanagedDLL.dll")]
private static extern void MethodA([MarshalAs(UnmanagedType.I1)] bool Flag);