1

WindowsSDKのDirectShowサンプルを調べています。クラスの多くは、デフォルト以外のコンストラクターを備えています。それらのコンストラクターはどのように呼び出されますか?誰が議論を提供しますか?

これらのクラスを登録なしでC++プログラムで使用できますか?もしそうなら、クラスコンストラクターを直接使用できます。

登録せずにCOMクラスを使用すると、次のコードフラグメントで何が起こりますか。

Foo * foo = new Foo(.....); // note, not using CoCreateInstance
Bar * bar = foo->QueryInterface(...);
bar->Release();
delete foo; // CRASH?

ありがとうございました!

4

2 に答える 2

2

それは何の関係もありませんCOM。フレームワークがこのように構築されているだけであり、DirectShow BaseClassesのコンストラクター引数は、クラス、祖先、インスタンス化ファクトリなど、すべてをまとめるために必要です。

登録なしでCOMクラスを使用することは、可能である場合と不可能である場合があります。代わりに、登録なしでDirectShowフィルターを使用することに興味があるのではないかと思います。このトピックに関する優れた記事があります:登録なしのフィルターの使用

于 2012-04-06T15:25:24.333 に答える
2

実際のCOMコクラスとして公開されているC++クラスは、通常、引数を取るコンストラクターを持つことはできません。COMクライアントコードがCoCreateInstance()関数に引数を渡すメカニズムはありません。COMインターフェイスには通常、必要な初期化を提供するためのInitialize()メソッドがあります。技術的には、これも修正できますが、CoCreateInstanceは、クラスファクトリ(IClassFactory)を非表示にする便利な関数です。カスタムCreateInstance()メソッドを使用したカスタムクラスファクトリは可能ですが、ほとんど実行されません。

Microsoftは、非COMコードのCOMコードでも一般的なインターフェイスベースのプログラミングモデルを使用しています。DirectXは良い例です。Direct3DCreate9Ex()をクラスファクトリと考えてください。

于 2012-04-06T15:33:45.843 に答える