2017-08-18 12 views
0

ユニバーサルWindows(C++/CX)でIBufferByteAccessとIBufferの両方を実装する方法は? MSDNによるとRef sealedクラスでIBufferとIBufferByteAccessの両方を実装する方法は? (C++/CX)

:あなたはIBufferインターフェイスを実装する場合

、あなたは直接 バッファにアクセスするためのCOMインターフェイスである IBufferByteAccessインタフェースを実装する必要があります。 C++の呼び出し元はこのインターフェイスを使用して、バッファのコピーを にすることを避けます。次の例では

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はOKですが、私はC++/CXマッピングrefのクラスは別の参照クラスまたはインターフェイスクラスから派生だけができることをIBufferByteAccessにエラーが発生します。

私はREFを削除する場合:

class BufferWrapper : 
     public Windows::Storage::Streams::IBufferByteAccess, 
     public Windows::Storage::Streams::IBuffer 

IBufferByteAccessはOKですが、私は、標準クラスはC++/CXクラスから派生することができないというIBufferからエラーを取得します。私は何も含まれていないヘッダファイルで

は、ソースファイルに私は私がhere

#include <robuffer.h> 

を発見したヘッダが含まれて私はまた、このヘッダには、私は含める必要が唯一のものであることhereを発見しました。

IBufferByteAccessはrefクラスではなく、public IUnknownから派生した構造体です(私は思う)。私が気づいていないref class/interfaceであるIBufferByteAccessの別の定義を持つヘッダファイルはありますか?

+0

それは正しいです、あなたはWRLを使用する必要があります。おそらく[MediaBufferWrapperサンプル](https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/SimpleCommunication/common/MediaExtensions/Microsoft.Samples.SimpleCommunication)が便利です。 –

+0

答えが見つかりました[ここ](https://stackoverflow.com/questions/10520335/how-to-wrap-a-char-buffer-in-a-winrt-ibuffer-in-c)!正確に私が必要なもの! – VesS

答えて

-1

基本的に私は私の質問に対する答えを見つけました。私が必要なのは、winrtオブジェクトにchar *バッファをラップすることでした。どのようにこれを行うことができますこのスタックオーバーフローの質問の答えで見つけることができます:How to wrap a char* buffer in a WinRT IBuffer in C++

関連する問題