2009-03-16 6 views
1

Visual Studio 2008とATLを使用してCOMオブジェクトを作成しています。簡単なプロパティとメソッドを追加するのは簡単ですが、もっと複雑な作業をしたいと思っています。私は私のCOMオブジェクトのプロパティを経由してC++オブジェクトへのアクセス権を与えたいので、私のような何かを行うことができます。オブジェクトをATLのプロパティとして返す

// Pseudo-code 
var obj = CreateObject("progid"); 
obj.aProperty.anotherProperty = someValue; 

だから、aPropertyanotherPropertyと呼ばれるプロパティを公開し、別のオブジェクトへの参照を返します。

私は(IClass2それを呼び出す)第二の目的のために私のプロジェクトに別の簡単なATLオブジェクトを追加する必要があり、IDLで以下のようなものを持っていることを推測している:私は

[propget, id(1)] HRESULT aProperty([out, retval] IClass2** ppValue); 

の午前ここの正しいトラックは?誰かがこの種のことについて良いチュートリアルを知っていますか?

答えて

2

オートメーション言語から呼び出す場合は、IDispatchから派生したインターフェイスが返される必要があります。少なくともIDispatch **として返す必要があります。 retvalのためには十分だと思います。単純な[out]パラメータの場合は、オートメーション言語が理解できるように、バリアント*(バリエーションタイプをVT_LPDISPATCHに設定したもの)として渡す必要があります。

良いチュートリアルがあるかどうかわかりません。私は包括的な参照を探して以来、それはしばらくしています。私が与えることができる最高のアドバイスは、あなたが渡しているすべてのものがオートメーションと互換性があることを確認することです(例えば:あなたがVARIANTに入れることができるタイプです)。それはあなたの問題の80%を処理する必要があります。しかし、それは非常に有効です。ちょうどMSDNで読んで、あなたはうまくいくはずです。