关于ATL自动生成的事件激发函数Fire_XXX(...)的代码说明[1]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 xxandoo 的 blog

比如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接口),而不

本文关键:关于ATL自动生成的事件激发函数Fire_XXX(...)的代码说明
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top