[英]How I can declare arrays in struct?
如何在其中聲明具有固定大小數組的結構?
我找到了解決方案,但它只適用於原始數據類型。 我需要我的數組是MyStruct
類型。
那么如何在其中聲明一個包含其他結構數組的結構?
恩。
unsafe struct Struct1{
fixed int arrayInt[100]; // works properly
fixed Struct2 arrayStruct[100]; //not compile
}
我的同事找到了這樣做的工作方式。 我認為這是正確的方式。
[StructLayout(LayoutKind.Sequential)]
public struct Struct1
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = sizeOfarray)]
private Struct2[] arrayStruct;
}
你不能。 固定數組僅限於bool,byte,char,short,int,long,sbyte,ushort,uint,ulong,float或double。
請參閱http://msdn.microsoft.com/en-us/library/zycewsya%28v=VS.80%29.aspx
執行互操作的一種方法可能是在C ++中編寫一個包裝程序集,它可以轉換為更加C#-interop友好的結構。
您不能將自定義類型與固定數組一起使用。 (有關詳細信息,請參閱TTonis答案。)
我認為您應該使用MarshalAs
屬性來指定如何編組成員,而不是嘗試使用特定的內存布局在C#中構造結構。 即使你設法讓成員占用大量內存,你仍然會在元素之間填充,導致對齊問題。
您可以在結構中引用常規數組,並指定它應該被編組為ByValArray
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.