質問

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);

私はここで正しい軌道に乗っていますか?誰もがこの種の良いチュートリアルを知っていますか?

役に立ちましたか?

解決 2

この記事に出会ったばかりです:

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

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

他のヒント

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top