目录
问题描述
在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);
本文介绍了在C#项目中调用C++ DLL时遇到的bool返回值始终为true的问题。问题根源在于C#和C++对bool类型的处理差异。提供了两种解决方案:一是改用int返回值,1代表true,0代表false;二是通过[return: MarshalAs(UnmanagedType.I1)]注解,确保返回1字节的bool值。
4625

被折叠的 条评论
为什么被折叠?



