5

この質問が誰にとっても明白であると思われる場合は申し訳ありませんが、私はCOMを初めて使用します。ここにあるチュートリアルhttp://www.codeguru.com/cpp/com-tech/activex/tutorials/article.php/c5567から、C ++で作成されたすべてのCOMクラスは、独自のQueryInterface、AddRef、およびReleaseを実装する必要があるようです。 。これらのメソッドは、新しいクラスに対して基本的に同じ実装を持つ必要があるため、開発者向けに抽象クラスやそれを実装するものがない理由がわかりません。非常に多くの人がすでに何度も実装しているのと同じものを再実装する必要がある理由がわかりません(チュートリアルが間違っていて何かがある場合を除く)。

ありがとう

4

3 に答える 3

3

FTA:

「COM の背後にある基本原理を理解したいすべてのプログラマーは、単純な C++ を使用して、つまり MFC/ATL に付随するテンプレートやマクロを使用せずに、少なくとも 1 つの単純な COM オブジェクトを作成する必要があると私は信じています。」

あなたの質問に答えるには: はい、すべての COM コンポーネントはIUnknownを実装する必要があります。これは、COM が構築されている基盤です。ただし、COM オブジェクトを作成するための "標準的な配管" ​​に関しては、これがATL Project Wizardの目的です。

于 2011-06-28T13:45:59.287 に答える
1

はい、すべてのCOMクラスはIUnknownから継承するため、すべてのCOMクラスを実装する必要があります。これIUnknownは基本的なCOMテクノロジの原則の1つです。これは通常、ATLを使用して行われます。これを行うためのテンプレートとマクロがあり、ATLを使用したくない場合でも、ほとんどの些細なケース(1つのインターフェイスの実装など)のテンプレートを非常に簡単に作成して再利用できます。

于 2011-06-28T13:55:58.210 に答える
1

ATL やその他のヘルパー ライブラリを使用したくない場合は、QueryInterface を処理するQISearchヘルパー関数を使用できます。AddRef と Release は、独自の基本クラスに実装できます。

COM はプレーン C でも動作する必要があるため、Windows SDK はクラスとそのメソッドの定義を実際には超えません。

于 2011-06-28T13:52:50.793 に答える