代码之家  ›  专栏  ›  技术社区  ›  Simsons

什么是IconnectionPoint和EventHandling

  •  3
  • Simsons  · 技术社区  · 14 年前

    IConnectionPoint 以及这与 IConnectionPointContainer,IEnumConnectionPoints,IEnumConnections 事件处理

    阅读来自 MSDN CodeProject 它解释了其他一些方法,如: 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进行正常编程与使用连接点之间的主要区别在于,在标准客户机-服务器情况下,服务器公开客户机使用的方法列表,在连接点情况下,客户机公开服务器使用的一组方法。

    1 回复  |  直到 9 年前
        1
  •  8
  •   sharptooth    14 年前

    看来你大错特错了。通常,您的客户机将接收事件,而COM对象将触发这些事件。为了实现这一点,客户要求( QueryInterface() )那个 IConnectionPointContainer 接口,调用 IConnectionPointContainer::FindConnectionPoint() IConnectionPoint::Advise() 并将指针传递给自身或某个子对象。

    客户端必须实现一些事件接口(其中一个GUID被传递到 IConnectionPointContainer::FindConnectionPoint() ). 一旦订阅( )客户端将接收来自COM服务器的调用-事件。

    通常情况下,COM服务器会例行地做一些事情,并决定通知客户端(比如用户在ActiveX控件中移动鼠标)——它只会获取一个指向事件接收器的指针数组,并在该接口上调用所需的方法。

    COM事件实际上是 回调 . 使用C++中的回调(或C或支持函数指针或接口的任何其他语言)的方式与COM中的事件一样。是的,你说得对,当服务器触发事件时,客户机实际上充当了服务器对事件的反应。这是一个回调场景 其他代码 调用您的功能。在这种情况下,服务器将调用事件接口的实现。

        2
  •  -1
  •   RamPrakash sams58    5 年前

    这两篇文章提供了有用的信息:

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

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

    @sharptooth忘记提到的是,指针传递给 IConnectionPoint::Advise COM 对象。

    这意味着它不仅必须实现特定的事件接口,还必须实现 IUnknown 接口。