2014-08-28 5 views
0

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

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

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

ответ

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