ActiveX и COM для межпроцессного взаимодействия

У меня есть программа с закрытым исходным кодом, которая генерирует события ActiveX, и мне нужно изменить мою так, чтобы эти события могли быть получены. Таким образом, у нас есть два отдельных исполняемых файла, и никакой графический интерфейс не используется. До сих пор я дошел до этой точки, которая работает, только если событие генерируется и принимается одним и тем же процессом:

[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 находится в приложении, с которым мне нужно взаимодействовать. Как я могу соединить приемник и источник, когда они находятся в двух отдельных процессах?

Либо объяснение, либо некоторые ссылки будут полезны.

0

Решение

  1. Вы не хотите приписывать C ++, поскольку, несмотря на то, что он все еще поддерживается, реальность такова, что он устарел по крайней мере с VS 2008
  2. Тебе нужно event_receiver(com, не native тип, так как события ActiveX находятся под вопросом
  3. Приведенные выше пункты предполагают, что вы не используете атрибуты и вместо этого используете IDispEventImpl или же IDispEventSimpleImpl класс для реализации приемника событий управления ActiveX (в статье приведен фрагмент кода и приведен пример проекта).
2

Другие решения


По вопросам рекламы [email protected]