如何使用Marshal类从非托管内存中读取bool?

时间:2013-10-05 05:07:23

标签: c# interop marshalling

Marshal class不包含ReadBool方法。如果我的c ++结构包含bool字段,那么我应该如何阅读它?我试过这样做:(bool) Marshal.ReadInt32(intPointer, offset)但是不允许将int32强制转换为bool。

1 个答案:

答案 0 :(得分:2)

C ++ is implementation-defined中的

sizeof(bool),因此最好将结构中的字段定义为已知大小的整数(例如int32_tBOOL) 。然后习惯使用0表示false而不是 - 0表示true

// C++
intPointer->int32_t_field = bool_value ? 1 : 0;
// C#
bool result = Marshal.ReadInt32(intPointer, offset) != 0;