什么是IconnectionPoint和EventHandling

Sim*_*ons 3 c++ windows com iconnectionpoint queryinterface

试图了解这是什么IConnectionPoint以及如何连接到IConnectionPointContainer,IEnumConnectionPoints,IEnumConnectionsEventHandling.

阅读MSDNCodeProject中的artcicles,它解释了其他方法,如:QueryInterface()和其他方法.

我无法弄清楚所有这些东西(IConnectionPointContainer,IEnumConnectionPoints,IEnumConnections)是如何相互关联和事件处理.

我只想创建一个simpleClient,它将触发COM对象中的事件.

如果有任何文章或代码片段可以解释事物如何通过简单和小块代码相互关联将是有帮助的.

值得一提的是我最近开始在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进行正常编程和使用连接点之间的主要区别在于,在标准客户端 - 服务器情况下,服务器公开客户端使用的方法列表,并且在连接点情况下,客户端公开服务器使用的一组方法.

sha*_*oth 7

看起来你错了大图.通常,您的客户端将接收事件,COM对象将触发这些事件.为了实现这个客户端的请求(QueryInterface())的IConnectionPointContainer接口,调用IConnectionPointContainer::FindConnectionPoint()IConnectionPoint::Advise()并传递一个指向自身或某些子对象那里.

客户端必须实现一些事件接口(传递一个GUID IConnectionPointContainer::FindConnectionPoint()).订阅(建议)后,客户端将接收来自COM服务器的调用 - 事件.

通常,COM服务器会定期执行某些操作并决定通知客户端(例如用户在ActiveX控件中移动鼠标) - 它只是获取一个指向事件接收器的指针数组,并在该接口上调用它想要的方法.

COM事件实际上是回调的实现.与在C++(或C或任何其他支持函数指针或接口的语言)中使用回调的方式相同,您可以在COM中使用事件.是的,你是对的,当服务器触发事件​​时,客户端实际上充当对事件做出反应的服务器.这是一个回调场景 - 其他代码调用您的功能.在这种情况下,服务器会调用您的事件接口的实现.