C# P/Invoke时可直接复制的类型和非可直接复制的类型

在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类型(以及作为格式化类型进行封送的类)的格式化的值类型。可参见(默认封送处理行为 - .NET Framework | Microsoft Learn

对象引用属于non-blittable类型。

non-blittable types在进行平台调用时,必须将这些 non-blittable 数据类型转换为可以封送的形式,这里就不详细说明了。有需要的小伙伴可查看

Blittable and Non-Blittable Types - .NET Framework | Microsoft Learn

猜你喜欢

转载自blog.csdn.net/zhaotianff/article/details/142916327