读书人

问基本有关问题

发布时间: 2012-03-03 15:33:04 作者: rapoo

问基本问题
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

读书人网 >C++

热点推荐