更新:2007 年 11 月
如果某种类型在托管内存和非托管内存中有通用的表现形式,从而不需要由封送拆收器特殊处理即可转换为非托管代码或托管代码,那么这种类型被认为可直接复制到本机结构中。
两种版本的 .NET Framework 中可直接复制到本机结构中的类型
在 System 命名空间中定义的以下类型在 .NET Framework 全功能版和 .NET Compact Framework 中都是可直接复制到本机结构中的类型:
以下复杂类型也是可直接复制到本机结构中的类型:
可直接复制到本机结构中的类型的一维数组。
只包含可直接复制到本机结构中的类型的格式化值类型。由于在 .NET Compact Framework 中所有结构和类始终具有顺序布局,因此托管值类型与非托管结构具有相同的内存布局。
.NET Compact Framework 中特有的可直接复制到本机结构中的类型
.NET Compact Framework 提供以下可直接复制到本机结构中的类型,因为它们在公共语言运行库中实现:
-
这是 1 字节整数值。在 .NET Framework 全功能版中,Boolean 的默认封送处理与 MarshalAsAttribute(UnmanagedType.Bool) 属性相对应,后者使用 4 字节整数值。
-
这始终是 Unicode 字符(2 个字节),而 .NET Framework 全功能版可能将它视为 Unicode 字符或 ANSI 字符,具体取决于 MarshalAsAttribute 属性或 DllImportAttribute.CharSet 字段。
-
这始终被视为 Unicode 数组,而 .NET Framework 可能将它视为 Unicode 数组或 ANSI 数组或 BSTR,具体取决于 MarshalAsAttribute 属性或 DllImportAttribute.CharSet 字段。