VC++:如何捕获从 ATL 项目中的 ActiveX (.ocx) 触发的事件

Posted

技术标签:

【中文标题】VC++:如何捕获从 ATL 项目中的 ActiveX (.ocx) 触发的事件【英文标题】:VC++: How to capture the Events fired from an ActiveX (.ocx) inside ATL project 【发布时间】:2017-10-17 22:00:03 【问题描述】:

我正在制作控件的包装器,即 ocx 对象的接口。必须创建一个 ATL 项目,然后添加/加载 ocx 文件。它具有公开的属性、方法和事件。我能够控制/使用它的属性和方法,但是我被困在事件上,尤其是在它触发后处理它。

在谷歌上搜索过它,我发现的大多数指南都是从头开始制作的,或者来自 ATL 事件本身。我想要实现的是利用 ocx 中暴露的事件。有人知道吗?

非常感谢。

【问题讨论】:

【参考方案1】:

在 ATL 中,处理 COM 事件的标准选项是使用 IConnectionPointContainer 和 Event Handling and ATL 中解释的朋友:

有关如何触发事件和实现连接点的信息,请阅读ATL Connection Points。

或者,特别是对于 ActiveX 控件事件,您的第二个选项是 IDispEventImpl 第一个链接的类引用:

Using IDispEventImpl,包括引用的示例 AtlEvnt.exe sample shows how to creates ATL sinks by using the ATL IDispEventImpl and IDispEventSimpleImpl classes

IDispEventImpl在其他资源上也有详细解释,例如:

Understanding COM Event Handling 在 CodeProject 上

【讨论】:

以上是关于VC++:如何捕获从 ATL 项目中的 ActiveX (.ocx) 触发的事件的主要内容,如果未能解决你的问题,请参考以下文章

VC++ ATL编写的Windows系统服务程序如何运行设置断点调试

VC学习笔记---ATL MFC CLR三个库的区别

如何使用Visual Studio在c中捕获全屏

使用 VC++ 2008 Express 进行 ATL 开发

COM组件(ATL篇)

Window 7 上的 ATL COM DLL 注册无法更新 CLSID 部分,但 TypeLib 可以工作