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