1

Visual Studio 2008 と ATL を使用して COM オブジェクトを作成しています。単純なプロパティとメソッドを追加するのは簡単ですが、もっと複雑なことをしたいと思っています。COM オブジェクトのプロパティを介して C++ オブジェクトにアクセスできるようにしたいので、次のようにします。

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

そのため、aPropertyというプロパティを公開する別のオブジェクトへの参照を返しますanotherProperty

2 番目のオブジェクトのプロジェクトに別の単純な ATL オブジェクトを追加し (それIClass2を と呼びます)、IDL に次のようなものを含める必要があると推測しています。

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

私はここで正しい軌道に乗っていますか?この種の優れたチュートリアルを知っている人はいますか?

4

2 に答える 2

2

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

良いチュートリアルがあるかどうかはわかりません。包括的なリファレンスを探してからしばらく経ちました。私ができる最善のアドバイスは、渡すものすべてがオートメーションと互換性があることを確認することです (例: VARIANT に入れることができる型です)。これにより、問題の 80% が処理されるはずです。ただし、それは非常に実行可能です。MSDN を読むだけで問題ありません。

于 2009-03-16T16:54:57.480 に答える
1

私はちょうどこの記事に出くわしました:

HOWTO:静的オブジェクト階層をATLに実装する

これは私が達成しようとしていることと非常によく似ています。

于 2009-03-17T07:47:39.567 に答える