P/Invoke各种总结(二、Blittable and Non-Blittable Types 可直接复制的类型和非可直接复制的类型)
在C#中有一些类型在托管与非托管代码之间可以直接使用,不需要进行任何转换,这些类型就称之为 blittable types
类型如下:
System.Byte | System.SByte | System.Int16 | System.UInt16 |
System.Int32 | System.UInt32 | System.Int64 | System.UInt64 |
System.IntPtr | System.UIntPtr | System.Single | System.Double |
还有另外两种特殊的blittable类型
1、一维blittable类型的数组,但是,包含 blittable 类型变量数组的类型本身不是 blittable 类型
2、所有只包含blittable类型(以及作为格式化类型进行封送的类)的格式化的值类型。可参见(https://docs.microsoft.com/zh-cn/dotnet/framework/interop/default-marshaling-behavior#default-marshaling-for-value-types)
对象引用属于non-blittable类型。
non-blittable types在进行平台调用时,必须将这些 non-blittable 数据类型转换为可以封送的形式,这里就不详细说明了。有需要的小伙伴可查看
https://docs.microsoft.com/en-us/dotnet/framework/interop/blittable-and-non-blittable-types