4

これが何であり、どのようにこれがEventHandlingIConnectionPointに接続されているかIConnectionPointContainer,IEnumConnectionPoints,IEnumConnectionsを理解しようとしています。

次のような他の方法について説明しているMSDNおよびCodeProjectの記事を読んでくださいQueryInterface()

これらすべてのもの()がどのようIConnectionPointContainer,IEnumConnectionPoints,IEnumConnectionsに相互に関連し、イベント処理を行っているのか理解できません。

COMオブジェクトでイベントをトリガーするsimpleClientを作成したいだけです。

単純で小さなコードのチャンクで物事が互いにどのように関連しているかを説明できる記事やコードスニペットがある場合は、役に立ちます。

初心者のCで最近開発を始めたことは言うまでもありません。

@sharptoothを編集する

行" typically your client will receive events and the COM object will trigger those events "の場合

多くの記事から、私が理解したのは、その時点で接続ポイントを使用するとき the client exposes a set of methods that the server usesです。

TechRepublichの記事の一部を概説しています。

クライアントサーバーとシンクソース

したがって、標準のクライアントサーバーシステムでのCOMを使用した通常のプログラミングと接続ポイントの使用の主な違いは、標準のクライアントサーバーの場合、サーバーはクライアントが採用するメソッドのリストを公開し、接続ポイントの場合はクライアントは、サーバーが使用する一連のメソッドを公開します。

4

2 に答える 2

9

全体像が間違っているようです。通常、クライアントはイベントを受信し、COMオブジェクトがそれらのイベントをトリガーします。これを実現するために、クライアントはインターフェイスを要求( QueryInterface())し、それ自体またはそこにあるサブオブジェクトへのポインタを呼び出して渡します。IConnectionPointContainerIConnectionPointContainer::FindConnectionPoint()IConnectionPoint::Advise()

クライアントは、いくつかのイベントインターフェイスを実装する必要があります(その1つのGUIDがに渡されますIConnectionPointContainer::FindConnectionPoint())。サブスクライブ(アドバイス)されると、クライアントはCOMサーバーからの呼び出し(イベント)を受信します。

通常、COMサーバーは定期的に何かを実行し、クライアントに通知することを決定します(たとえば、ユーザーがActiveXコントロールでマウスを動かす)-イベントレシーバーへのポインターの配列を取得し、そのインターフェイスで必要なメソッドを呼び出すだけです。

COMイベントは、実際にはコールバックの実装です。C ++(またはCまたは関数ポインターまたはインターフェースをサポートする他の言語)でコールバックを使用するのと同じ方法で、COMでイベントを使用します。はい、その通りです。サーバーがイベントをトリガーすると、クライアントは実際にはイベントに反応するサーバーとして機能します。これはコールバックシナリオです。他のコードが機能を呼び出します。この場合、サーバーはイベントインターフェイスの実装を呼び出します。

于 2010-08-25T06:42:27.763 に答える
-1

これらの2つの記事は、有用な情報を提供します。

https://devblogs.microsoft.com/oldnewthing/?p=4113

https://devblogs.microsoft.com/oldnewthing/20130612-00/?p=4103

@sharptoothが言及するのを忘れたのは、渡されるポインターはオブジェクトIConnectionPoint::Adviseへのポインターでなければならないということです。COM

つまり、特定のイベントインターフェイスだけでなく、IUnknownインターフェイスも実装する必要があります。

于 2020-01-02T19:06:35.223 に答える