如何在 ref sealed class 中实现 IBuffer 和 IBufferByteAccess? (C++/客户体验)
How to implement both IBuffer and IBufferByteAccess in ref sealed class? (C++/CX)
如何在 Universal Windows (C++/CX) 中实现 IBufferByteAccess 和 IBuffer?
根据 MSDN:
When you implement the IBuffer interface, you must implement the
IBufferByteAccess interface, which is a COM interface for accessing
the buffer directly. C++ callers use this interface to avoid making a
copy of the buffer.
以下面的例子:
ref class BufferWrapper sealed :
public Windows::Storage::Streams::IBufferByteAccess,
public Windows::Storage::Streams::IBuffer
{
public:
// Inherited via IBufferByteAccess
virtual HRESULT QueryInterface(REFIID riid, void ** ppvObject) override;
virtual ULONG AddRef(void) override;
virtual ULONG Release(void) override;
virtual HRESULT Buffer(byte ** value) override;
// Inherited via IBuffer
virtual property unsigned int Capacity;
virtual property unsigned int Length;
}
IBuffer 没问题,但我在 IBufferByteAccess 上收到错误消息,即 C++/CX 映射引用 class 只能派生自另一个引用 class 或接口 class.
当我删除 ref:
class BufferWrapper :
public Windows::Storage::Streams::IBufferByteAccess,
public Windows::Storage::Streams::IBuffer
IBufferByteAccess 没问题,但我从 IBuffer 得到错误,标准 class 不能从 C++/CX class.
派生
在 header 文件中我没有包含任何内容,在源文件中我只包含 header 我找到的 here
#include <robuffer.h>
我还发现 here 这个 header 是我需要包含的唯一内容。
问题是(我认为)IBufferByteAccess 不是 ref class,而是从 public IUnknown 派生的结构。是否有我不知道的带有 IBufferByteAccess 的另一个定义的 header 文件,即 ref class/interface?
基本上我已经找到了问题的答案。我需要的是将 char* 缓冲区包装在 winrt 对象中。如何做到这一点可以在这个堆栈溢出问题的答案中找到:How to wrap a char* buffer in a WinRT IBuffer in C++
如何在 Universal Windows (C++/CX) 中实现 IBufferByteAccess 和 IBuffer?
根据 MSDN:
When you implement the IBuffer interface, you must implement the IBufferByteAccess interface, which is a COM interface for accessing the buffer directly. C++ callers use this interface to avoid making a copy of the buffer.
以下面的例子:
ref class BufferWrapper sealed :
public Windows::Storage::Streams::IBufferByteAccess,
public Windows::Storage::Streams::IBuffer
{
public:
// Inherited via IBufferByteAccess
virtual HRESULT QueryInterface(REFIID riid, void ** ppvObject) override;
virtual ULONG AddRef(void) override;
virtual ULONG Release(void) override;
virtual HRESULT Buffer(byte ** value) override;
// Inherited via IBuffer
virtual property unsigned int Capacity;
virtual property unsigned int Length;
}
IBuffer 没问题,但我在 IBufferByteAccess 上收到错误消息,即 C++/CX 映射引用 class 只能派生自另一个引用 class 或接口 class.
当我删除 ref:
class BufferWrapper :
public Windows::Storage::Streams::IBufferByteAccess,
public Windows::Storage::Streams::IBuffer
IBufferByteAccess 没问题,但我从 IBuffer 得到错误,标准 class 不能从 C++/CX class.
派生在 header 文件中我没有包含任何内容,在源文件中我只包含 header 我找到的 here
#include <robuffer.h>
我还发现 here 这个 header 是我需要包含的唯一内容。
问题是(我认为)IBufferByteAccess 不是 ref class,而是从 public IUnknown 派生的结构。是否有我不知道的带有 IBufferByteAccess 的另一个定义的 header 文件,即 ref class/interface?
基本上我已经找到了问题的答案。我需要的是将 char* 缓冲区包装在 winrt 对象中。如何做到这一点可以在这个堆栈溢出问题的答案中找到:How to wrap a char* buffer in a WinRT IBuffer in C++