У меня есть программа с закрытым исходным кодом, которая генерирует события 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
находится в приложении, с которым мне нужно взаимодействовать. Как я могу соединить приемник и источник, когда они находятся в двух отдельных процессах?
Либо объяснение, либо некоторые ссылки будут полезны.
event_receiver(com
, не native
тип, так как события ActiveX находятся под вопросомIDispEventImpl
или же IDispEventSimpleImpl
класс для реализации приемника событий управления ActiveX (в статье приведен фрагмент кода и приведен пример проекта).