c++ - 用于进程间通信的 ActiveX 和 COM

标签 c++ com activex inter-process-communicat

我有一个生成 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 位于我需要与之交互的应用程序中。当接收器和源处于两个独立的进程中时,如何连接它们?

解释或一些引用资料都会有用。

最佳答案

  1. 您不需要属性化 C++,因为尽管它仍然受支持,但现实是它至少从 VS 2008 开始就已被弃用
  2. 你需要event_receiver(com ,不是 native 类型,因为 ActiveX 事件有问题
  3. 上面的项目建议您不要使用属性,而是使用 IDispEventImplIDispEventSimpleImpl 类来实现 ActiveX 控件事件的接收器(文章提供了代码片段并引用了示例项目)。

关于c++ - 用于进程间通信的 ActiveX 和 COM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25553677/

相关文章:

c++结构,如何动态创建结构对象,

c++ - 安装了 Cuda 8,它似乎缺少 npp.lib

c++ - 递归函数的运行时间T(n)

c++ - COM 和 CoGetClassObject()

python - MATLAB ActiveX 与 Python Win32COM

c# - ActiveX 要求用户在每次加载页面时安装

c++ - 左移的负数是否*总是*用 "1"而不是 "0"填充?

.net - 这种情况下需要STA消息循环吗?

.net - Visual Studio 6 无法加载在 .net 2.0 中编译的 COM dll

iis - 允许在 IIS7 中下载 DLL