我有一个生成 ActiveX 事件的闭源程序,我需要修改我的程序以便可以接收这些事件。所以我们有两个独立的可执行文件,没有使用 GUI 东西。到目前为止,我已经到了这一点,只有在同一进程生成和接收事件时才有效:
[event_source(native)]
class CSource {
public:
__event void MyEvent(int nValue);
};
[event_receiver(native)]
class CReceiver {
public:
void MyHandler(int nValue) { ... }
void hookEvent(CSource* pSource) {
__hook(&CSource::MyEvent, pSource, &CReceiver::MyHandler);
}
void unhookEvent(CSource* pSource) {
__unhook(&CSource::MyEvent, pSource, &CReceiver::MyHandler);
}
};
int main() {
CSource source;
CReceiver receiver;
receiver.hookEvent(&source);
__raise source.MyEvent(123);
receiver.unhookEvent(&source);
}
现在,event_source
位于我需要与之交互的应用程序中。当接收器和源处于两个独立的进程中时,如何连接它们?
解释或一些引用资料都会有用。
最佳答案
- 您不需要属性化 C++,因为尽管它仍然受支持,但现实是它至少从 VS 2008 开始就已被弃用
- 你需要
event_receiver(com
,不是native
类型,因为 ActiveX 事件有问题 - 上面的项目建议您不要使用属性,而是使用
IDispEventImpl
或IDispEventSimpleImpl
类来实现 ActiveX 控件事件的接收器(文章提供了代码片段并引用了示例项目)。
关于c++ - 用于进程间通信的 ActiveX 和 COM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25553677/