比如idl中的函数定义:
[id(3), helpstring("method tcb83")]
hresult tcb83([out]variant* varref);
对应的事件激发函数和代码说明如下:
hresult fire_tcb83(...)
{
//定义一个variant的智能类型用于存放回调结果
ccomvariant varresult;
//定义一个指向com对象实例的指针
t* pt = static_cast<t*>(this);
int nconnectionindex;
//定义一个variant智能类型的数组,这个数组用
//来存放调用事件响应函数的参数,在调用后参数
//返回的值([out]或[in,out]的参数)仍放在对
//应的位置上,可以取得返回的值。
ccomvariant* pvars = new ccomvariant[1];
//m_vec是一个智能接口指针数组的封装类,数组每
//一项都是存放着一个客户端的事件接口指针,实际
//上每个客户端在激活有连接点功能的服务器后,都
//要调用类似adviser的方法,把自己实现的事件响
//应接口之指针传给服务器并放入这个数组,服务器
//激发事件实际上就是使用数组中保存的事件接口指
//针调用相应的方法,数组中的每个指针指向一个客户。
int nconnections = m_vec.getsize();
//遍历上面说的数组,取出指针并用其调用事件响应函数
for (nconnectionindex = 0;
nconnectionindex < nconnections; nconnectionindex++)
{
//取出事件回调接口指针
pt->lock();
ccomptr<iunknown> sp = m_vec.getat(nconnectionindex);
pt->unlock();
//强转为idispatch指针类型
//这里多说一句,一般情况下,事件回调接口都定义
//为dispinterface(纯的dispatch接口),而不