问题标签 [connection-points]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1165 浏览

c++ - 如何检查容器是否支持多个连接?

  • 实现了接收器类 - 接收来自 COM 服务器的事件通知
  • 事件接口派生自IDispatch

我有一个问题,即IConnectionPoint::Advise调用返回E_NOTIMPL。这可能是因为连接点只允许一个连接 - MSDN

笔记:

  • COM 服务器在进程外
  • 纯 C++ 实现

编辑:

S8.tlh:Win32 类型库 S8.tlb 的 C++ 源代码等效项:

Class Sink的实现——处理事件通知:

编辑:

Sink类中IUnknown接口的实现

问题:

  • 如何检查容器是否支持多个连接?
  • 如果需要更多信息,请相应评论。
0 投票
2 回答
334 浏览

c++ - 未收到所述事件通知

问题:

  • 未收到接收器(类)实现中列出的事件通知(来自 COM 对象 - 服务器)。

  • 接收到一个事件通知( Event_one ),但未相应接收其他事件通知

  • 如果更改顺序-在IDispatch::Invoke 中,即:

    • ifEvent_one被交换到Event_twothenEvent_two收到通知,但Event_one其他人相应地被忽略

问题:

  • 更好的实现方式,IDispatch::Invoke 还是 QI?
  • 使用错误的逻辑或方法?

注意

  • 没有 MFC
  • 无 ATL
  • 纯 C++
  • 使用消息循环:GetMessage()
  • STA模型( Coinitialize() )
  • 调用 IDispatch::Advise成功(来自调用S_OK的 HRESULT )
  • 在上面之后,COM对象方法调用正常(带有接口指针)
  • 单次致电 Advise
  • MIDL 编译器生成的类型库

例如(示例):

IDispatch::Invoke的插图- 取自Sink 类


查询接口说明

0 投票
6 回答
3954 浏览

c++ - 无法使 ATL 连接点正常工作

我正在尝试使用 ATL 创建一个 COM 组件,并且我想为我的 VB 客户端引发事件。我发现了许多教程,所有这些教程的细节似乎都各不相同,而且似乎都没有生成一个可行的解决方案。这是我正在做的事情:

(使用 Visual Studio 2008):

  1. 创建一个新的 ATL DLL 项目。我已经调用它了ATLEventTest
  2. 类视图:右键单击ATLEventTest,添加了一个新的 ATL 简单对象类。我称之为这个MyObject,它产生了CMyObject,,IMyObject等等......
  3. 该对象是通过以下方式创建的:a) 单元线程 b) 聚合 c) 双接口 d) ISupportErrorInfo e) 连接点

  4. 右键单击CProxy_IMyObjectEvents<T>,单击“添加功能”

  5. 函数的返回类型为 void,命名为someEvent,并采用int testParam.
  6. 重建。
    (此时,我应该能够在某处看到“实施连接点”。我没有……)
  7. 右键单击CMyObject。'添加连接点'
  8. 将“ _IMyObjectEvents”移到列表中。
  9. 在我的解决方案中进行了代码搜索。到处都找不到someEvent
  10. 再次添加该someEvent功能。现在,它位于 ATLEventTest_i.h
  11. 应该可以调用fire_someEvent(...)我的代码,但不能。

这一直让我发疯,试图让它发挥作用。如果有人能看到我做错了什么,我将不胜感激任何更正、提示、黑客等。

在这一点上,我很想说把向导搞砸了,直接尝试修改 c++ 和 idl,但我有一种感觉可能不会更好:(

0 投票
2 回答
565 浏览

visual-c++ - 在 VC++ 6 中创建一个新的连接点?

我有一个 ATL/COM 项目,在 VC++ 6 中。我想要一个现有的类,它以前从未被定义为引发事件,引发事件。为此,该类必须实现一个“连接点”。

这些事件属于以前没有任何类引发过的类型,因此我将不得不创建一个新的连接点,而不是重用现有的连接点。

我知道如何让一个类实现一个连接点——右键单击类视图中的类,选择“实现连接点”,然后从它显示的列表中选择适当的连接点。

我知道如何创建一个新的连接点,只要它与一个新的 ATL 类相关联来实现它 - 在创建类时检查“支持连接点”。

但是我不知道如何在创建实现它的新 ATL 类的情况下创建新连接点。

我修改了 IDL 以包含类似于现有连接点定义的内容:

(显然我有一个真正的 uuid,而不是“ blah blah blah ”)。

完成此操作后,_IBlahEvents 界面将显示在类视图中。但是当我右键单击要实现 _IBlahEvents 的 ATL 类并选择“实现连接点”时,_IBlahEvents 不会显示在现有连接点列表中。

我已经重新编译,包括清理和重建所有内容。

我错过了什么?

谢谢。

0 投票
2 回答
854 浏览

internet-explorer - 对象标签上的 IE attachEvent 导致内存损坏

我在具有以下事件的嵌入式 IE7/8 HTML 页面中有一个 ActiveX 控件[id(1)] HRESULT MessageReceived([in] BSTR id, [in] BSTR json)。在 Windows 上,该事件是使用 注册的OCX.attachEvent("MessageReceived", onMessageReceivedFunc)

以下代码在 HTML 页面中触发事件。

在我使用应用程序验证程序启用 gflags.exe 后,出现以下奇怪的行为:在执行 JavaScript 回调的 Invoke() 之后,来自 pvars[1] 的 BSTR 出于某种未知原因被复制到 pvars[0] !pvars 的 delete[] 导致双重释放相同的字符串,然后以堆损坏结束。

有人知道这里发生了什么吗?这是一个 IE 错误还是在 OCX 实现中我缺少一个技巧?

如果我使用如下标签:

...奇怪的复制操作不会发生。

由于 Fire_MessageReceived() 的调用者负责释放 BSTR,因此以下代码似乎也可以。

谢谢!

0 投票
1 回答
151 浏览

c++ - 重新生成连接点方法

我创建了一个连接点接口_IPlayerEvents。

我添加了几个方法

我已经构建了项目,VS2008 已经在 CProxy_IPlayerEvents 类中生成了代码:

现在我向 _IPlayerEvents 接口添加了另一个方法

当我构建时,没有代码被添加到 OnMessage 函数的 CProxy_IPlayerEvents 类中——我预计 VS2008 会生成:

如果可以的话,我宁愿避免手动更新 CProxy_IPlayerEvents。

如何强制 VS2008 重新生成 CProxy_IPlayerEvents 类?

0 投票
1 回答
476 浏览

c++ - 为什么 IE 不监听 ActiveX 事件?

我使用 longrun 方法将 ActiveX 控件放到 HTML 页面上,该方法应该触发要由 IE 处理的事件。

它们不会触发m_vec.GetSize() == 0,因为这意味着 IE 没有连接到我的 ActiveX。

站点是 localhost,它位于受信任的站点中,并且安全级别设置为最低。

html

IDL

С++ 继承列表:

COM_MAP

CONNECTION_POINT_MAP

CATEGORY_MAP

这里有什么问题?为什么 IE 无法连接到我的连接点界面?

临时解决方案

我放弃了游戏<script for event>并开始将javascript回调函数作为方法参数(类型IDispatch*)传递

0 投票
2 回答
1422 浏览

c# - 如何从未知的 com 对象接口(例如连接点)获取 guid?

我有正在运行的服务,可通过 COM 获得。我可以使用Activator.

我连接 COM 库

然后通过 Instance 获取我的对象

这实际上是IConnectionPointContainer

有几个连接点,并且有一个

如果我在 cpp atl 中没记错的话__uuid(IHelloWorld)

问题是:如何在容器中获取一些“IHelloWorld”接口(连接点)的指南?

0 投票
1 回答
120 浏览

c++ - Microsoft Word 连接点接收器示例/MFC 出现问题

我一直在尝试使用 MFC 为第三方 COM 组件实现连接点接收器。我之前开发过一些 COM 组件,虽然连接点接收器不是我精通的东西。在我的头撞墙一段时间后,我决定回到基础并找到这个 Microsoft 示例:

https://support.microsoft.com/en-us/kb/183599

这似乎与我正在尝试做的最相似。我试图完全按照描述重现该示例。虽然我的 MS Word 版本是 2010,但引用的界面似乎仍然有效。我尽职尽责地按照说明进行操作,将代码剪切并粘贴到我自己的项目中,只需要对宽字符串进行调整。编译后,我可以启动 word app 并退出它,但我没有收到连接点事件,这毕竟是重点。我认为问题可能出在函数 dispid 上,所以我尝试将 DISP_FUNCTION_ID 条目添加到调度图中;但这只会导致 oledisp1.ccp 第 549 行上的断言,该断言位于 CCmdTarget::GetStackSize 函数中。

我敢肯定这很简单,但我就是无法让它工作。有人可以帮我弄清楚示例中缺少什么吗?谢谢。

0 投票
1 回答
203 浏览

c++ - 调用 FindConnectionPoint 时访问冲突写入内存

我正在尝试订阅 MBN 活动。这是我的代码:

由于文档(恕我直言)有点缺乏,我将自己定位于我在网上找到的一些代码示例。直到我称FindConnectionPoint一切正常。调用时,FindConnectionPoint我收到写入内存的访问冲突,所以我想问题出在我的IConnectionPoint指针上,它在我发现的多个代码示例中声明。

希望有更多监督的人能够帮助解决这个问题。提前致谢