2016-12-28 9 views
0

WRL(Windowsランタイムテンプレートライブラリ)を使用してWinRT APIにアクセスするWin32アプリケーションがあります。WinRTへのネイティブC++の継承

ネイティブC++からIIterableを受け取る関数を呼び出すにはどうすればよいですか?私の問題は、IIterableまたはIVectorを実装するものを取得することです。具体的な例として

、私はインクルードでSetDefaultMenuItemsを呼び出すしたいと仮定\ 10.0.14393.0 \ WinRTの\ windows.ui.input.h:

namespace ABI { 
namespace Windows { 
namespace UI { 
namespace Input { 

    MIDL_INTERFACE("A6B79ECB-6A52-4430-910C-56370A9D6B42") 
    IRadialControllerConfiguration : public IInspectable 
    { 
     public: 
      virtual HRESULT STDMETHODCALLTYPE SetDefaultMenuItems( 
      /* [in] */ __RPC__in_opt __FIIterable_1_Windows__CUI__CInput__CRadialControllerSystemMenuItemKind *buttons) = 0; 
     // ... 
    }; 
} 
} 
} 
} 

の株式の実装があるように思えません。ネイティブC++の場合はIIterableまたはIVectorです。

+0

'' std :: vector'の上に[VectorView](https://code.msdn.microsoft.com/windowsapps/Windows-Runtime-Component-9b6c6989/sourcecode?fileId=113783&pathId=1623023906)を構築することができます。または標準C++コレクションタイプに一致するその他の適切なコンテナラッパーを使用します。 – IInspectable

+0

IVectorViewを実装するランタイムコンポーネントを作成する必要があります。そのカスタムコンポーネントを使用してIIterableをAPIに渡すようにしてください。 –

+0

'IVectorView'インタフェースはありません。 'VectorView'はクラステンプレートで、' IIterable'インターフェースを実装しています。 'VectorView'へのポインタを' IIterable'インタフェースを期待する関数にすぐに渡すことができます。 COM、C++、またはCOMを実装するためにC++がどのように使用されているかを理解していない可能性が高いため、おそらく完全にここで失われているようです。そしてWRLはあなたが最初に習得しなければならないもう一つの抽象化を加えます。これはうまく終わらないでしょう。最初からやり直して基礎知識を身に付ける必要があります。 – IInspectable

答えて

1

私はcppwinrtを使って私が望むことをやりました。これで、WinRTにバニラの標準コンテナなどを渡すことができました。