【发布时间】:2014-08-29 11:56:19
【问题描述】:
我有一个需要使用 COM 对象的旧版 Win32 应用程序(WndProcs 等)。通过使用一些 ATL 标头和一些智能指针,这很容易,但是我目前正在努力解决的是如何最好地接收来自该 COM 对象的事件?
我目前的工作计划是构建第二个 COM 对象(作为 dll)来处理所有下沉并使用 Windows 消息与旧应用程序进行通信。这“没问题”,但是为了让遗留应用程序做我想做的事,有很多麻烦的消息来回移动。
是否有一种易于访问的方法让 Win32 旧版应用程序直接接收 COM 事件而不是通过第二个“接收器”com 对象运行?
在深入了解这个过程之前,我想看看是否有其他人之前遇到过这个问题并找到了可行的解决方案。
谢谢!
【问题讨论】:
-
"...直接接收 COM 事件..." : where ?连接点设计需要一个接口指针,在通过调用
Advise()注册所述接口后,它会将其事件发送到该指针。这就是连接点的工作方式。如果您问是否必须实现作为基于 DLL 的 inproc 服务器挂起该事件目标接口的 COM 对象,答案是否定的,但无论如何您都需要一个接口。如何提供该界面完全取决于您。 -
ATL
IDispEventImpl接受通过连接点和IDispatch::Invoke传递的“典型”ActiveX 控件事件。 -
旧版应用程序使用什么编译器?
-
Microsoft Visual Studio 2008