COM_A(ICalc/CCalc, ICalc::Add(INT,INT))是一个支持连接点(dispinterface _ICalcEvents, _ICalcEvents::AddFinished(INT))的COM组件,形式为EXE(COM_A_EXE)。
这种情况下,COM_A的客户程序CLIENT使用COM_A的过程是:
1. 注册_ICalcEvents SINK.
2. 获取ICalc接口。
3. 调用ICalc::Add() ---->由客户端主动发起调用
4. SINK收到AddFinished()事件。
这样的过程没有问题。现在想问的是:
如果不是客户端主动发起调用,即COM_A只是供客户端进行事件注册,然后COM_A在事件发生时(如另一个工作线程计算出敏感结果时),主动向已注册客户端发出事件通知。这种该如何实现?
即COM_A_EXE如何调用COM_A/CCalc从PROXY继承来的Fire_XXX()函数?我对COM_A_EXE自己使用COM_A的过程不是很清楚,请各位大侠指教啊!
这种情况下,COM_A的客户程序CLIENT使用COM_A的过程是:
1. 注册_ICalcEvents SINK.
2. 获取ICalc接口。
3. 调用ICalc::Add() ---->由客户端主动发起调用
4. SINK收到AddFinished()事件。
这样的过程没有问题。现在想问的是:
如果不是客户端主动发起调用,即COM_A只是供客户端进行事件注册,然后COM_A在事件发生时(如另一个工作线程计算出敏感结果时),主动向已注册客户端发出事件通知。这种该如何实现?
即COM_A_EXE如何调用COM_A/CCalc从PROXY继承来的Fire_XXX()函数?我对COM_A_EXE自己使用COM_A的过程不是很清楚,请各位大侠指教啊!
具体的接口名字我不记得了,过程应该是
1,客户创建CommA的对象,得到ICalc
2,用这个接口执行QueryInterface(IID_IPoint....Factory(也有可能是container,就是负责创建连接点对象的接口),..)得到接口
3,用这个接口得到IConnectPoint接口
...这里的我写不清楚了,要写例子我才想得起来
4,advise