2010-08-25 1 views
3

Essayer de comprendre Qu'est-ce que IConnectionPoint et comment est-il connecté à IConnectionPointContainer,IEnumConnectionPoints,IEnumConnections et EventHandling. Lire les artcles de MSDN et CodeProject qui explique d'autres méthodes comme: QueryInterface() et autres.Qu'est-ce que IconnectionPoint et EventHandling

Je suis incapable de comprendre comment toutes ces choses (IConnectionPointContainer,IEnumConnectionPoints,IEnumConnections) sont interconnectés entre eux et la gestion des événements.

Je veux juste créer un simpleClient qui va déclencher un événement dans l'objet COM.

S'il y a des articles ou des extraits de code qui peuvent expliquer comment les choses sont liées les unes aux autres avec un morceau de code simple et petit sera utile. Il est intéressant de mentionner que j'ai commencé le développement en C récemment, un débutant.

Modifier @sharptooth

Pour la ligne "typically your client will receive events and the COM object will trigger those events."

De nombreux articles, Ce que je compris est Lorsque nous utilisons des points de connexion à ce moment-là, the client exposes a set of methods that the server uses.

Je suis juste Décrivant partie de l'article de TechRepublich:

serveur client par rapport à la source de puits

Ainsi, la principale différence entre la programmation normale avec COM dans un système standard client-serveur et à l'aide de points de connexion est que dans le cas standard client-serveur, le serveur expose une liste de méthodes que le client utilise, et dans le cas du point de connexion, le client expose un ensemble de méthodes que le serveur utilise.

Répondre

7

On dirait que vous avez une mauvaise image. En règle générale, votre client recevra des événements et l'objet COM déclenchera ces événements. Pour ce faire, le client demande (QueryInterface()) l'interface IConnectionPointContainer, appelle IConnectionPointContainer::FindConnectionPoint() et IConnectionPoint::Advise() et lui passe un pointeur ou un sous-objet.

Le client devra implémenter une interface d'événements (dont un GUID est passé en IConnectionPointContainer::FindConnectionPoint()). Une fois abonné (conseillé) le client recevra des appels du serveur COM - les événements. Généralement, le serveur COM fait quelque chose de façon routinière et décide d'en avertir les clients (disons qu'un utilisateur déplace la souris dans un contrôle ActiveX) - il obtient juste un tableau de pointeurs vers des récepteurs d'événements et appelle une méthode qu'il veut sur cette interface .

Les événements COM sont en fait une implémentation de callbacks. De la même façon que vous utilisez callback en C++ (ou C ou tout autre langage supportant des pointeurs ou des interfaces de fonctions), vous utilisez des événements dans COM. Oui, vous avez raison: lorsque le serveur déclenche l'événement, le client agit en fait comme un serveur réagissant à l'événement.C'est un scénario de rappel - le autre code appelle votre fonctionnalité. Dans ce cas, le serveur appelle votre implémentation de l'interface des événements.

+0

Édité la question avec ma requête – Simsons