.NET Compact Framework 中的封送处理结构
更新:2007 年 11 月
您可以在封送处理结构中嵌入数组和字符串。您必须使用 MarshalAsAttribute 属性来指定以何种方式封送嵌入式字符串,否则将引发异常。
将字符串封送到 wchar_t*, 时,您可以指定以下任一属性,指定的属性将作为指针封送到 Unicode 字符串:
[MarshalAs(UnmanagedType.LPWStr)]
- 或 -
[MarshalAs(UnmanagedType.LPTStr)]
下表说明将数组和字符串从非托管代码封送到托管代码的结构定义。请注意,某些示例使用 MarshalAsAttribute。
要封送的数据 |
非托管结构 (C++) |
托管结构 (C#) |
---|---|---|
整数数组 |
|
|
字符数组 |
|
|
字符串的字符数组 |
|
|
指向字符串的指针 |
|
|
指定结构布局
您可以指定如何使用 StructLayoutAttribute 属性为平台调用封送拆收器布局结构。.NET Compact Framework 支持所有这三个 LayoutKind 枚举值:Auto(默认值)、Sequential 和 Explicit。
在 .NET Compact Framework 中,Auto 等效于 Sequential。
指定了 Explicit 值后,必须对所有字段应用 FieldOffsetAttribute 属性。字节值必须在类型的边界内。例如,2 字节整数必须只能在偶数地址上开始,4 字节整数必须在能被 4 整除的地址上开始,依此类推。
请注意,不支持 StructLayoutAttribute.Pack 字段。