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

 

posted @ 2020-03-17 14:14  zhaotianff  阅读(1483)  评论(0编辑  收藏  举报