次の方法で共有


メソッド、プロパティ、イベントの呼び出し

.NET クライアントは、アクティブな COM オブジェクトのメソッドを呼び出したり、そのオブジェクトのプロパティを調整したり、サーバー上で発生したイベントを捕捉したりできます。Loan コクラス (アンマネージ C++、ATL) は、このセクションのコード例に示すメソッドとプロパティを公開します。

メソッドの呼び出し

COM オブジェクトのメソッドをマネージ コードから呼び出す方法は、マネージ オブジェクトのメソッドを呼び出す場合とまったく同じです。COM コンポーネントはインターフェイスを通じて機能を必ず公開しているため、インターフェイス上でメソッドを呼び出す方法と、COM コクラス上でメソッドを直接呼び出す方法のどちらかを選択できます。コクラスは、その既定のインターフェイスで公開されているメンバだけを公開します。インポートしたコクラスで GetFirstPmtDistribution メソッドを直接呼び出すコードの例を次に示します。

MorePmts = ln.GetFirstPmtDistribution(ln.Payment, Balance, _
               Principal, Interest)
MorePmts = ln.GetFirstPmtDistribution(ln.Payment, out Balance, 
               out Principal, out Interest);

データ型のマーシャリングは、COM 相互運用機能で実行されます。たとえば、COM オブジェクトに System.String 型を渡すと、COM 相互運用機能はその型を BSTR に変換します。

タイプ ライブラリで [out retval] としてマークされたパラメータは、メソッドの戻り値に変換されます。これらのパラメータは、変換処理中にマネージ シグネチャから削除されます。既定では、ランタイムは、エラーを表す HRESULT をそれに対応するマネージ例外に変換することで、マネージ コードに対して例外をスローします。

プロパティの取得および設定

COM インターフェイスには、プロパティをインターフェイスのメンバとして含めることができます。COM オブジェクトが公開したプロパティは、マネージ クラスが公開したプロパティの場合と同じ方法で取得または設定できます。アセンブリにメタデータとしてインポートされた COM インターフェイスおよびコクラスは、プロパティおよび各プロパティのアクセサ メソッドを公開します。OpeningBalance プロパティを設定するコード例を次に示します

ln.OpeningBalance = Convert.ToDouble(Args(1))
ln.OpeningBalance = Convert.ToDouble(Args[0]);

プロパティ変換の詳細については、「インポート メンバの変換」を参照してください。.NET Framework におけるプロパティの、より一般的な説明については、「プロパティの概要」を参照してください。

イベントの処理

.NET クライアントは、COM サーバーが発生させたイベントを他のマネージ イベントを処理する場合と同じ方法で処理できます。サーバーのタイプ ライブラリをインポートすると、変換処理のときに、イベント ハンドラに接続するためのデリゲートが生成されます。この処理の詳細については、「COM ソースによって発生したイベントの処理」を参照してください。

.NET クライアント内でイベントを発生させる COM オブジェクトには、解放される前に 2 つのガベージ コレクタ (GC) コレクションが必要になります。これは、COM オブジェクトとマネージ クライアントとの間で発生する循環参照が原因です。COM オブジェクトを明示的に解放する必要がある場合は、Collect メソッドを 2 回呼び出してください。

参照

処理手順

方法 : HRESULT に例外を割り当てる

概念

マネージ コードでの COM 型の使用
インポート メンバの変換
プロパティの概要
COM 相互運用機能のサンプル : .NET クライアントおよび COM サーバー

その他の技術情報

相互運用マーシャリング