2013-01-19 76 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

相關問題