3

私は VC++ 6 で ATL/COM プロジェクトを持っています。これまでイベントを発生させるように定義されたことのない既存のクラスで、イベントを発生させたいと考えています。これを行うには、クラスは「接続ポイント」を実装する必要があります。

これらのイベントは、これまで発生したクラスがないタイプであるため、既存の接続ポイントを再利用するのではなく、新しい接続ポイントを作成する必要があります。

クラスに接続ポイントを実装する方法を知っています。クラス ビューでクラスを右クリックし、[接続ポイントの実装] を選択して、表示されるリストから適切な接続ポイントを選択します。

新しい接続ポイントを実装するために新しい ATL クラスに関連付けられている限り、新しい接続ポイントを作成する方法を知っています - クラスを作成するときに「サポート接続ポイント」をチェックしてください。

しかし、それを実装する新しい ATL クラスを作成せずに、新しいコネクション ポイントを作成する方法がわかりません。

IDL を変更して、既存の接続ポイントの定義に似たものを含めました。

[
    uuid(*blah blah blah*),
    helpstring("_IBlahEvents Interface")
]
dispinterface _IBlahEvents
{
    properties:
    methods:
    [id(1), helpstring("method BlahChanged")] HRESULT BlahChanged();
};

(明らかに、「何とか何とか」ではなく、本当のuuidを持っています

これを実行すると、_IBlahEvents インターフェイスがクラス ビューに表示されます。しかし、_IBlahEvents を実装する ATL クラスを右クリックして [接続ポイントの実装] を選択すると、_IBlahEvents が既存の接続ポイントの一覧に表示されません。

すべてのクリーニングと再構築を含め、再コンパイルしました。

私は何が欠けていますか?

ありがとう。

4

2 に答える 2

0

IDL ファイルを手動で変更した場合は、この手順も手動で行う必要があります。つまり、コクラスに次を追加します。

[default, source] dispinterface _IBlahEvents; 
于 2009-08-01T22:22:39.747 に答える
0

この基本クラスが追加されていますか?

  public IConnectionPointContainerImpl<CYOUR_CLASS_HERE>

そうでない場合は、「Support Connection Points」チェックボックスをオンにする以外は、これと一致する新しいプロジェクトを最初から作成します。

必ず同じ名前を使用してください。次に、それを元のプロジェクトと比較して、何が欠けているかを確認します。

于 2009-07-21T19:54:14.947 に答える