私は誰かがこの質問をdownvotedなぜ見当がつかないについて。それは私にとって完全に有効な質問のようです。彼らは今朝まだコーヒーを持っていないかもしれない。
GUID、IUnknown、IDispatchとCOMの関係は何ですか?私は簡単な調査をしようとします。
すべてのCOMコンポーネントは、共通のインターフェイスIUnknownを公開します。 IUnknownには、AddRef()、Release()、およびQueryInterface()メソッドがあります。 AddRef()とRelease()は参照カウントをサポートするために使用されるため、オブジェクトへの参照がすべて解放されるとオブジェクトは破棄されます。 QueryInterface()は、C++のdynamic_cast <のCOMのバージョンのようなものです。これは、クライアントコードが実際にIUnknowポインターがIDog、ICatなどの別のタイプのオブジェクトを指しているかどうかを調べるために使用されます。
すべてのCOMコンポーネントはIUnknownを実装する必要がありますが、ほとんどのCOMライブラリは自動的にこれを実装します。したがって、COMコードを記述するときは、通常、IUnknownを取得するコードを書く必要はありません。あなたは無料でそれを手に入れます。
GUIDは一種の指紋です。実生活のように、2人の人が全く同じ名前を持つことができます.COMでは2つのCOMコンポーネントも同じ名前を持つことができます。たとえば、2つのライブラリで両方ともIDogインターフェイスを実装することができますが、まったく異なることがあります。しかし、両方のライブラリをあなたのマシンにインストールすることはできますが、2つのライブラリを区別することはGUIDを使用するためです。 GUIDはGlobally Unique IDentifierです。つまり、理論上、理論上、地球上の他の誰も同じGUIDを作成することはできません。したがって、名前に加えて、すべてのCOMオブジェクト(およびコクラス、ライブラリなど)にはGUIDがあります。
IDispatchはIUnknownと同じような別のベースインターフェイスですが、すべてのCOMオブジェクトに必要なIUnknownとは異なり、IDispatchはオプションであり、すべてではないCOMオブジェクトの多くがサポートする特殊な機能を提供します。証明書の言語機能をサポートし、クライアントがオブジェクトを使いやすくするようなこと。ほとんどの(おそらく)COMオブジェクトは、このインタフェースを公開します。
COMライブラリについてはい、Windowsに登録する必要があります。
私はCOMコンポーネントを書くときに、(publicメンバとデフォルトのコンストラクタを使用して)クラスライブラリプロジェクトを作成し、後でtlbexpツール(またはregasm)を使用するとIUnknownとGUIDが自動的に生成されます。 – pkolodziej