因此,我使用Marshal类将非托管结构解析为托管结构。到目前为止,一切都按预期工作,除了我正在努力如何将非托管字符转换为托管枚举类型。
例如:
<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文章,但仍然没有运气。
希望有人可以简单地指出我正确的方向。
答案 0 :(得分:5)
Enum
的默认基础类型为Int32
。您必须在声明中将其更改为Byte
:
Public Enum ManagedCustomEnum As Byte
Value_1
Value_2
Value_3
Value_4
Value_etc
End Enum