私はDirectShowを使用する小さなライブラリを作成しようとしています。このライブラリは.NETアプリケーションで利用されるので、C++/CLIで書くのが最善だと思いました。C++/CLIのリファレンスクラスで「ネイティブ」ポインタを使用するにはどうすればよいですか?
HRESULT hr = CoCreateInstance( CLSID_FilterGraph,
NULL,
CLSCTX_INPROC_SERVER,
IID_IGraphBuilder,
(void**)(&graphBuilder)); //error C2440:
graphBuilder
が宣言されています:
私はしかし、このラインでトラブルを抱えています私が正しくthis pageを理解していた場合
public ref class VideoPlayer
{
public:
VideoPlayer();
void Load(String^ filename);
IGraphBuilder* graphBuilder;
};
、私は示すためにいつものように*/&
を使用することができる「ネイティブ」私のC++/CLIライブラリのアンマネージメモリへのポインタ。 ^
は、管理オブジェクトへのポインタを示すために使用されます。しかし、このコードが生成されます。
エラーC2440: '型キャスト':エラーが
graphBuilder
があると考えられていることを示唆している 'CLI :: interior_ptr' から '無効**'
に変換することはできませんがa 'cli::interior_ptr<Type>'
。それは管理されたメモリへのポインタ/ハンドルですね。しかし、それは純粋なネイティブポインターです。私はハンドルを期待しているメソッドにポインタを渡そうとしていません。逆の場合も同じです。管理クラスに格納したいだけです)もしそうなら、graphBuilder
は伝統的なポインタですか?
(This questionは似ていますが、それは私のクラスのメンバーになることができないような答えは、pin_ptrを使用するために、私は、私を助けて表示されていない)
設定中にポインタ自体が動く可能性があります - 私はそれを完全に逃しました!ハンスありがとう! – sebf
管理対象クラスの内部メンバーでもアンマネージドポインタを保持できないということは明らかです。これが真実なら、どのようにしてどのように一貫した方法で管理型と非管理型の間を橋渡しするのか、私の頭の中を包み込むようにしようとしています。 –
いいえ、それはいいです。 OPはオブジェクトのメンバーである&graphBuilderへのポインタを作成しました。 –