2009-04-19 24 views
2

最近、私はinteropマーシャリングについて読んでいましたが、私はまだ1つのことを理解していません。 COMに.NETアセンブリを表示させるには、tlbexpツールおよび/またはregasmツールを使用する必要があります。 COMを.NETに見えるようにするには、私はtlbimpツールを使用する必要があります。COMインターフェイス質問 - .NET

  1. これ以外にも、guid属性のIUnknownとIDispachを持つCOMインターフェイスを扱うコードがインターネット上で多数見られました。

私の質問はこれらすべてがCOMにどのように関連しているのですか?私はそれを使用する必要がありますか?私は認定の準備をしていますが、インターフェース、ガイド、IUnknownなどについては言及していませんでした。

私は明らかに私の後ろに不明なことを残したくないので、私は本当に感謝しています。

  1. また、COM(tlbimpツール)からインポートされたタイプライブラリに関して1つの質問があります。 COMからインポートされたタイプライブラリには、システムにCOMオブジェクト登録が必要ですか?

種類が PK

答えて

3

私は誰かがこの質問をd​​ownvotedなぜ見当がつかないについて。それは私にとって完全に有効な質問のようです。彼らは今朝まだコーヒーを持っていないかもしれない。

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に登録する必要があります。

+0

私はCOMコンポーネントを書くときに、(publicメンバとデフォルトのコンストラクタを使用して)クラスライブラリプロジェクトを作成し、後でtlbexpツール(またはregasm)を使用するとIUnknownとGUIDが自動的に生成されます。 – pkolodziej

関連する問題