将字节编组到枚举
Marshal byte to enum
所以我正在使用 Marshal class 将非托管结构解析为托管结构。到目前为止,一切都按预期工作,除了我正在努力如何将非托管 Char 转换为托管枚举类型这一事实。
例如:
<StructLayout(LayoutKind.Sequential, Pack:=1)>
Public Structure UnamangedToManaged
<MarshalAs(UnmanagedType.I1)>
Public _Enum As ManagedCustomEnum
end structure
Public Enum ManagedCustomEnum
Value_1
Value_2
Value_3
Value_4
Value_etc
End Enum
这给出了错误:Unvalid combination
如果我只是简单地删除 <MarshalAs(UnmanagedType.I1)>
,那么除了结构其余部分的索引关闭外,解析工作正常,给出无效值。
尝试了很多可能性,也阅读了所有 MSDN 文章,但仍然没有运气。
希望有人能简单地指出我正确的方向。
Enum
的默认基础类型为 Int32
。您必须在声明中将其更改为 Byte
:
Public Enum ManagedCustomEnum As Byte
Value_1
Value_2
Value_3
Value_4
Value_etc
End Enum
所以我正在使用 Marshal class 将非托管结构解析为托管结构。到目前为止,一切都按预期工作,除了我正在努力如何将非托管 Char 转换为托管枚举类型这一事实。
例如:
<StructLayout(LayoutKind.Sequential, Pack:=1)>
Public Structure UnamangedToManaged
<MarshalAs(UnmanagedType.I1)>
Public _Enum As ManagedCustomEnum
end structure
Public Enum ManagedCustomEnum
Value_1
Value_2
Value_3
Value_4
Value_etc
End Enum
这给出了错误:Unvalid combination
如果我只是简单地删除 <MarshalAs(UnmanagedType.I1)>
,那么除了结构其余部分的索引关闭外,解析工作正常,给出无效值。
尝试了很多可能性,也阅读了所有 MSDN 文章,但仍然没有运气。
希望有人能简单地指出我正确的方向。
Enum
的默认基础类型为 Int32
。您必须在声明中将其更改为 Byte
:
Public Enum ManagedCustomEnum As Byte
Value_1
Value_2
Value_3
Value_4
Value_etc
End Enum