目录
问题描述
在C#项目中,调用C++ DLL中方法时,bool 返回值始终返回true。
问题原因
C将布尔定义为4字节int,C++将其定义为1字节。C#团队决定在PInvoke期间使用4字节bool作为默认值,因为大多数系统API函数使用4字节值作为bool。如果要更改此行为,必须通过封送处理来完成,并指定要使用1字节值。
解决方案
方案一
采用int 返回值替代bool返回值,如返回1代表true,返回0代表false。
方案二
通过[return:MarshalAs(UnmanagedType.I1)] 指定返回值为1字节值。
[DllImport("Whisper.dll", EntryPoint="Exist", CallingConvention=CallingConvention.Cdecl)]
[return:MarshalAs(UnmanagedType.I1)]
public static extern bool Exist([MarshalAs(UnmanagedType.LPStr)] string name);