【问题标题】:ActiveX and COM for interprocess communication用于进程间通信的 ActiveX 和 COM
【发布时间】:2014-08-28 16:28:57
【问题描述】:

我有一个生成 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++ com activex inter-process-communicat


    【解决方案1】:
    1. 您不希望归因于 C++,因为即使它仍然受支持,但现实是它至少从 VS 2008 开始就已被弃用
    2. 您需要 event_receiver(com,而不是 native 类型,因为 ActiveX 事件存在问题
    3. 以上几点建议不要使用属性,而是使用IDispEventImplIDispEventSimpleImpl类来实现ActiveX控件事件的接收器(文章给出了代码sn-p和参考示例项目)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      相关资源
      最近更新 更多