2013-01-19 71 views
0

我需要一个structs(这是所有非托管structs与固定大小)阵列,但显然视觉工作室不喜欢我的代码。

基本上我需要像在另一个结构中固定结构数组?

fixed page_table tables[1024];在我的结构。

这是使视觉工作室发脾气的代码,反正有我可以做到这一点(我需要它的所有预初始化)

[StructLayout(LayoutKind.Explicit, Pack = 1)] 
public unsafe struct page_directory 
{ 
    [FieldOffset(0)] 
    public fixed page_table tables[1024]; 

    [FieldOffset(0x8000)] 
    public fixed uint tablesPhysical[1024]; 

    [FieldOffset(0x9000)] 
    public uint physicalAddr; 
} 

[StructLayout(LayoutKind.Explicit, Pack = 1)] 
public unsafe struct page_table 
{ 
    [FieldOffset(0)] 
    public fixed page pages[1024]; 
} 
+0

你能否澄清“不喜欢”和“身体健康”?当你尝试代码时会发生什么,它与你期望的有什么不同?你是否收到任何错误信息,如果有,哪个? – Guffa

+0

固定大小缓冲区类型必须为以下值之一:bool,byte,short,int,long,char,sbyte,ushort,uint,ulong,float或double 固定大小的缓冲区可能不是列出的以外的任何类型。为避免此错误,请使用其他类型或不要使用固定数组。 – user1454902

+0

但事情是我的结构有一个固定的大小,它不像我在那里扔了一个字符串或东西.....而int是一个结构,并以某种方式C#接受..... – user1454902

回答

1

错误消息是相当清楚的。您不能使用除固定缓冲区列出的任何其他类型。

错误消息甚至给你提供了可能的解决方案,可以使用其中一种允许的类型,也可以不使用固定的缓冲区。

如果你确实需要你正在尝试使用的代码,那么你已经达到了无法做任何你想做的事情的地步。

+0

那么我没有得到的东西是它如何接受这些类型,因为从我的理解,他们中没有一个实际上是硬编码为C#语言,而是用C#编码并存在于某处MSCORLIB.DLL ... – user1454902

+0

@ user1454902:固定缓冲区仅限于这些类型,但文档没有具体说明原因。这些类型实际上是用语言进行硬编码的,但它们也在框架中定义。 – Guffa

相关问题