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