コンポーネントオブジェクトモデル(com)サンプル
comは、オブジェクト指向設計に基づいてソフトウェアをコンポーネントするための非常に強力なテクノロジーです。詳細については、こちらのドキュメントをご覧ください。
COMの主要な欠点の1つは、COMコンポーネントのセットアップに必要な最初のボイラープレートです。 ATLは、ボイラープレートの構築に役立つライブラリのセットですが、独自の複雑さが伴います。
ここでのこのサンプルは、開発者がインフラストラクチャを心配するのではなく、ビジネスロジックのみに集中できるように、COMのセットアップと登録の大量にリフティングする骨格コードを提供します。 ATLは使用しません。代わりに、単純なプレーンC ++コードを使用して、開発者が必要に応じて基礎となるスケルトンを理解してデバッグできるようにします。
使用される用語
- COMサーバーは、ビジネスロジックを提供するオブジェクトです。
- COMクライアントは、COMサーバーによって公開されたインターフェイスを介してCOMサーバーにアクセスするコードです。
- COMクライアントとCOMサーバー間の相互作用は、Marshalingを介して行われ、プロキシスタブDLLが必要です。
- 詳細については、こちらのドキュメントをご覧ください。
このプロジェクト
このサンプルのさまざまなディレクトリに関する要約は次のとおりです。
- comsampleproxy :proxystub dll。新しいインターフェイスを追加するには、プロジェクトに新しいIDLファイルを追加するだけです。
- comSampleserver :COMサーバーのインプロセスとプロセスのアクティブ化のサポート(OSでは、dllhost.exe、つまりdll surrogateを提供します)。
- comsampleservice :LocalSystemサービスでCOMサーバーをアクティブ化するためのサポート。
- comsampleclient :上記のCOMサーバーを呼び出してテストするサンプルCOMクライアント。
新しいCOMコンポーネントの作成と登録
このモデルでは、新しいCOMコンポーネントを作成するのは非常に簡単です。
- インターフェイスを追加します:
- comsampleproxyプロジェクトにインターフェイスを備えた新しいIDLファイルを追加します。サンプルファイル/comsampleproxy/icomtest.idlを参照してください。
- comクラスを実装してください:
- 代理アクティブ化におけるインプロセスのアクティベーションまたはプロセス不足の場合:クラスの実装をComSamplesServerプロジェクトに追加します。 comsampleserver/ccomServertest.cppの例を参照してください。次に、comsampleserver/dll.cppに移動し、クラスエントリを「g_classes」に追加するだけです。
- LocalSystemサービスでの処理外のアクティベーションについては、ComsamplesServiceプロジェクトにクラスの実装を追加します。 comsampleservice/ccomservicetest.cppの例を参照してください。次に、comsampleservice/main.cppにアクセスして、「g_classes」にクラスエントリを追加するだけです。
- COMコンポーネントを登録してください:
- comsampleproxy.dllをターゲットマシンにコピーします。高度なプロンプトから、実行: regsvr32 comsampleproxy.dll 。
- 代理アクティブ化におけるインプロセスのアクティベーションまたはプロセスの外れの場合:comsampleserver.dllをターゲットマシンにコピーします。昇格したプロンプトから、run: regsvr32 comsampleserver.dll 。
- ローカルシステムサービスでの処理外のアクティベーションの場合:comsampleservice.exeをターゲットマシンにコピーします。コマンドプロンプトの高さから、 comsampleservice.exe /registerServerを実行します。
それです!
商標
このプロジェクトには、プロジェクト、製品、またはサービスの商標またはロゴが含まれる場合があります。 Microsoftの商標またはロゴの承認された使用は、Microsoftの商標およびブランドガイドラインに従うものであり、従う必要があります。このプロジェクトの変更されたバージョンでのMicrosoft商標またはロゴの使用は、混乱を引き起こしたり、Microsoftのスポンサーシップを暗示したりしてはなりません。サードパーティの商標またはロゴの使用は、これらのサードパーティのポリシーの対象となります。