什么是IBuffer?

时间:2015-02-19 18:26:47

标签: c# interface

修补一些低级代码,我偶然发现了.Net的IBuffer界面。此接口仅声明两个属性 - LengthCapacity

问题:

  • 这个界面是什么?
  • 由于只公开LengthCapacity,被叫方如何访问实际数据?

2 个答案:

答案 0 :(得分:3)

来自MSDN:

  

实现IBuffer接口时,必须实现IBufferByteAccess接口,这是一个直接访问缓冲区的COM接口

因此,为了回答您的第二个问题,IBufferByteAccess接口的实现将关注访问数据。

至于用例MSDN说:

  

IBuffer接口由IInputStream和IOutputStream接口使用。

您可以找到更多here

答案 1 :(得分:3)

1)IBuffer接口用于传递缓冲区。 IBuffer对象表示一个字节数组。

接口无法访问缓冲区的字节。原因是WinRT类型无法在元数据中表达指针,因为指针不能很好地映射到某些语言(如JavaScript或安全的C#代码)。接口可以提供一种访问缓冲区中单个字节的方法,但调用一个方法来获取每个字节会对性能造成太大影响。

2)在内部,CLR可以获取IBuffer对象,查询其 IBufferByteAccess 接口,然后查询Buffer属性以获取指向缓​​冲区中包含的字节的不安全指针。使用指针,可以直接访问字节。

internal interface IBufferByteAccess {
    unsafe Byte* Buffer { get; }
}