私は、Windows APIから少なくとも1つのCOMインターフェイスを消費するC++クラスを作成しています。明らかに、クラス内でこれらのオブジェクトを消費するときは、AddRef()
とRelease()
を正しく呼び出す必要があります。クラスでIUnknownを実装する場合
私の質問は... IUnknown
をC++クラス自体に追加実装する必要がありますか?私が使用していたインターフェイスが非同期操作またはコールバックを実行していた場合は、これを行うだけで済みます。その場合は、非同期操作またはコールバックが完了したときにC++クラス自体が "生きている"ことを確認する必要があります。これは正しいです?
私が興味を持っている具体的なインターフェイスは、IMFSourceReader
(Windows Media Foundation)です。このインタフェースのデフォルトは同期モードです。これを正しく理解すれば、非同期モードで使用する代わりにIUnknown
をC++クラスに実装する必要があります。それ以外の場合は、IMFSourceReader->AddRef()
またはIMFSourceReader->Release
へのコールで十分です。
ただし、IMFSourceReader
を非同期モードで使用する場合は、IMFSourceReaderCallback
インターフェイスが必要です。それ自体はIUnknown
を継承します。その場合、私はクラスで実装する必要があります。
私の理解は正しいですか?私は実装の初期段階にありますので、共有するサンプルコードは実際にはありません。この時点で、私はクラスの非常に基本的な構造を打ち破ろうとしています。
[IUnknownのしくみ](https://msdn.microsoft.com/en-us/library/windows/desktop/dd388915(v=vs.85).aspx)は既に読んでいますか? – user0042
Windowsで実装されているCOMインターフェイスの場合は、あいまいな質問をする必要はありません。あなたがやろうとしていることを示して、マニュアルを尋ねないでください。 –
ヒント: 'AddRef()'と 'Release()'呼び出しを適切に行うためには、ラッパークラスのようなスマートポインタを実装することをお勧めします([here](http://loki-lib.sourceforge.net/html /a00045.html)参照)。 – user0042