【发布时间】:2011-08-13 23:15:44
【问题描述】:
当将包含单个字符字段的结构从 C++ 编组到 C# 时,C# 结构定义应该是什么样子?
[StructLayout(LayoutKind.Sequential, Size = 1), Serializable]
public struct SomeStruct
{
[MarshalAs(UnmanagedType.I1)]
public sbyte Field;
}
或
[StructLayout(LayoutKind.Sequential, Size = 1), Serializable]
public struct SomeStruct
{
[MarshalAs(UnmanagedType.U1)]
public byte Field;
}
我找不到关于它是否是有符号字节的明确信息。 (在 C++ 结构定义中被声明为 'char')
UPD:这是否取决于 C++ lib 是使用 GCC 还是 VS(默认编译器选项)构建的?如果没有,我能否希望 'char' 在 GCC 和 VS 上都签名(默认编译器选项)
【问题讨论】:
-
该字段实际上是一个字符,还是只是填充到方便的 8 位类型(碰巧称为 char)中的其他东西?
-
C++中用于存储小整数
标签: c# c++ marshalling