首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

问基本有关问题

2012-03-03 
问基本问题intCDrvManager::StOnConnect(HANDLEhDrvObject,HANDLEhSocket,HANDLEhUser){BOOLbIFOKTRUECD

问基本问题
int   CDrvManager::StOnConnect(HANDLE   hDrvObject,   HANDLE   hSocket,   HANDLE   hUser)
{
        BOOL   bIFOK   =   TRUE;

        CDrvManager*   pThis   =   (CDrvManager*)hUser;

        ::EnterCriticalSection(&pThis-> m_CriticalSection);

        DRVOBJECT   &DrvObject   =   pThis-> m_hConnections[ConvertHandleToIndex(hDrvObject)];

        //获得本地地址
        sockaddr_in   addr;
        int   addrsize   =   sizeof(sockaddr);
        getsockname((SOCKET)hSocket,   (sockaddr*)&addr,   &addrsize);
        *((DWORD*)(DrvObject.MyAddress))   =   addr.sin_addr.s_addr;
        *((DWORD*)(DrvObject.MyAddress+4))   =   (DWORD)ntohs(addr.sin_port);

        //如果不是废弃状态,将置为连接状态
        if   (DrvObject.Status   !=   STATUS_ABORT)
                DrvObject.Status   =   STATUS_ACTIVE;

        //IF已经被删除
        if   ((DrvObject.Type   ==   COM_TCPIP)   &&   (DrvObject.Status   !=   STATUS_ACTIVE))
                bIFOK   =   FALSE;

        ::LeaveCriticalSection(&pThis-> m_CriticalSection);

        if   (bIFOK)
                return   pThis-> OnConnect(hDrvObject);
        else
                return   0;
}

---
上面函数里pThis-> OnConnect(hDrvObject)的pThis指的哪个类对象的指针?看程序,CDrvManager的OnConnect无意义:
////////////////////////////////////////////////////////////////////////////////
//   Function         :   OnConnect
//   Description   :   连接成功事件,对于客户型的接口当连接成功时产生此事件,用户必须重载此函数。
//   Input               :  
//                               1.   Name       :   hFile
//                                     Type       :   HANDLE   句柄
//                                     Desc       :   接口句柄
//  
//   Return             :
//                               返回值没有实际意义
//
////////////////////////////////////////////////////////////////////////////////
int   CDrvManager::OnConnect(   HANDLE   hIFHandle   )
{
        return   0;
}

---------------

pThis-> OnConnect(hDrvObject)的pThis指的哪个类对象的指针怎么看?看上面的定义CDrvManager*   pThis   =   (CDrvManager*)hUser;有点模糊~

[解决办法]
定义CDrvManager* pThis = (CDrvManager*)hUser;

pThis 指针指向的 类型为 CDrvManager

热点排行