共用方式為


在 .NET Compact Framework 中封送處理結構

更新:2007 年 11 月

您可以在結構中內嵌陣列和字串以進行封送處理 (Marshaling)。您必須使用 MarshalAsAttribute 屬性來指定要如何封送處理內嵌的字串,否則會擲回例外狀況。

將字串封送處理至 wchar_t*, 時,您可以指定下列任何屬性,這會將封送處理為 Unicode 字串的指標:

[MarshalAs(UnmanagedType.LPWStr)]

-或-

[MarshalAs(UnmanagedType.LPTStr)]

下表顯示從 Unmanaged 到 Managed 程式碼封送處理陣列和字串的結構定義。請注意,其中一些範例使用 MarshalAsAttribute

要封送處理的資料

Unmanaged 結構 (C++)

Managed 結構 (C#)

整數的陣列

typedef struct _MyStruct
{
  int intArray[10]; 
} MyStruct;
struct MyStruct
{
  [MarshalAs(
    UnmanagedType.ByValArray, 
    SizeConst = 10)]
  int[] intArray;
}

字元的陣列

typedef struct _MyStruct
{
  char charArray[10]; 
} MyStruct;
struct MyStruct
{
  [MarshalAs(
    UnmanagedType.ByValArray, 
    SizeConst = 10)]
  char[] charArray;
}

字串字元的陣列

typedef struct _MyStruct
{
  char charArray[10]; 
} MyStruct;
struct MyStruct
{
  [MarshalAs(
    UnmanagedType.ByValTStr, 
    SizeConst = 10)]
  String str;
}

字串的指標

typedef struct _MyStruct
{
  wchar_t *pStr; 
} MyStruct;
struct MyStruct
{
  [MarshalAs(
    UnmanagedType.LPWStr)]
  String str;
}

指定結構配置

您可以指定如何使用 StructLayoutAttribute 屬性來配置平台叫用封送處理器的結構。.NET Compact Framework 支援所有三種 LayoutKind 列舉值:Auto (預設值)、SequentialExplicit

在 .NET Compact Framework 中,Auto 相當於 Sequential

指定 Explicit 值之後,就必須對每個欄位都套用 FieldOffsetAttribute 屬性。位元組值必須在型別的界限之內。例如,2 個位元組的整數必須從偶數位址開始,4 個位元組的整數必須從可由 4 整除的位址開始,其他依此類推。

請注意不支援 StructLayoutAttribute.Pack 欄位。

請參閱

其他資源

.NET Compact Framework 中的封送處理支援