C#中的struct union问题 [英] Problem of struct union in C#
本文介绍了C#中的struct union问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有这个结构:
I Have this struct:
public struct A
{
public int first;
}
public struct B
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst=32)]
public char[] first;
}
[StructLayout(LayoutKind.Explicit)]
public struct CUnion
{
[FieldOffset(0)]
public A _a;
[FieldOffset(0)]
public B _b;
}
public struct C
{
public int type;
public CUnion u;
}
但是当我实例化新的C struct时,这个错误
but when i instance new C struct, this error
C c = new C();
// Exception
// An unhandled exception of type 'System.TypeLoadException' occurred in Microsoft.VisualStudio.HostingProcess.Utilities.dll
// Additional information: Could not load type 'CUnion' from assembly '...' because it contains an object field at offset 0 that is incorrectly aligned or overlapped by a non-object field.
任何ideia?
PS:固定内存不适用,因为内存不是senquencial
推荐答案
请试试这个
Please Try this
public struct A
{
public int first;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct B
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public char[] first;
}
[StructLayout(LayoutKind.Explicit)]
public struct CUnion
{
[FieldOffset(4)]
public A _a;
[FieldOffset(0)]
public B _b;
}
public struct C
{
public int type;
public CUnion u;
}
这篇关于C#中的struct union问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文