美文网首页
C++\CLI中的Blittable类型

C++\CLI中的Blittable类型

作者: 左图右码 | 来源:发表于2021-07-06 17:15 被阅读0次

    当你调用非托管程序集中的代码(C/C++)时,才会用到(比如调用Win32 API, COM) 当托管类型和非托管类型在内存结构上完全对应时,两边都可以直接使用时,而不用作任何封装转换,这个类型就是Blittable, 比如int32, byte...
    p_invoke调用的返回类型必须是Blittable类型。

    System下的Blittable类型
    System.Byte
    System.SByte
    System.Int16
    System.UInt16
    System.Int32
    System.UInt32
    System.Int64
    System.UInt64
    System.IntPtr
    System.UIntPtr
    System.Single
    System.Double
    • 在混合编程中,GCHandleAlloc函数的第二个参数如果是GCHandleType::pinned的时候,被"钉"住的对象如果包含非Blittable类型的时候,则会抛出异常,只能是Blittable的类型才能被"钉"住。但对象本身可以是non-Blittable类型,但数据成员只要没有non-Blittable类型就可以。
    • 委托是引用静态方法或类实例的数据结构,不是Blittable。

    下面的都不是Blittable类型的

    None Blittable 描述
    System.Array 转换为C样式数组或SAFEARRAY
    System.Bool Converts to a 1, 2, or 4-byte value with true as 1 or -1
    System.Char 转换为Unicode或ANSI字符
    System.Class 转换为类接口
    System.Object 转换为变体或接口
    System.Mdarray 转换为C样式数组或SAFEARRAY
    System.String 转换为以空引用结尾的字符串或BSTR
    System.Valuetype 转换为具有固定内存布局的结构
    System.Szarray 转换为C样式数组或SAFEARRAY

    虽然System.Char和wchar_t对应,但不是Blittable类型。

    相关文章

      网友评论

          本文标题:C++\CLI中的Blittable类型

          本文链接:https://www.haomeiwen.com/subject/wdigultx.html