WSAAsyncSelect模型编程,但是为什么CAsyncSocket::AttachHandle在msdn中查不到呢? 为什么CAsyncSocket::AttachHandle在msdn中查不到呢?CSocket类的Create()函数是通过调用CAsyncSocket类Create函数实现的。CAsyncSocket类Create函数先调用CAsyncSocket类的Socket函数,而Socket函数执行后,就执行CAsyncSocket::AttachHandle函数,而这个函数我在2001 1月的msdn中查不到啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 AttachHandle这个函数确实没有。估计是笔误。应该是Attach(Handle)。//或者这是别人写的伪代码。 有的。楼上的可以查看一下CAsyncSocket::Socket中的代码。BOOL CAsyncSocket::Socket(int nSocketType, long lEvent, int nProtocolType, int nAddressFormat){ ASSERT(m_hSocket == INVALID_SOCKET); m_hSocket = socket(nAddressFormat,nSocketType,nProtocolType); if (m_hSocket != INVALID_SOCKET) { CAsyncSocket::AttachHandle(m_hSocket, this, FALSE); return AsyncSelect(lEvent); } return FALSE;} // In VC2005 C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\src\mfc\sockcore.cppvoid PASCAL CAsyncSocket::AttachHandle( SOCKET hSocket, CAsyncSocket* pSocket, BOOL bDead){ _AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState; BOOL bEnable = AfxEnableMemoryTracking(FALSE); if (!bDead) { ASSERT(CAsyncSocket::LookupHandle(hSocket, bDead) == NULL); if (pState->m_pmapSocketHandle->IsEmpty()) { ASSERT(pState->m_pmapDeadSockets->IsEmpty()); ASSERT(pState->m_hSocketWindow == NULL); CSocketWnd* pWnd = new CSocketWnd; pWnd->m_hWnd = NULL; if (!pWnd->CreateEx(0, AfxRegisterWndClass(0), _T("Socket Notification Sink"), WS_OVERLAPPED, 0, 0, 0, 0, NULL, NULL)) { TRACE(traceSocket, 0, "Warning: unable to create socket notify window!\n"); AfxThrowResourceException(); } ASSERT(pWnd->m_hWnd != NULL); ASSERT(CWnd::FromHandlePermanent(pWnd->m_hWnd) == pWnd); pState->m_hSocketWindow = pWnd->m_hWnd; } pState->m_pmapSocketHandle->SetAt((void*)hSocket, pSocket); } else { void* pvCount; INT_PTR nCount; if (pState->m_pmapDeadSockets->Lookup((void*)hSocket, pvCount)) { nCount = (INT_PTR)pvCount; nCount++; } else nCount = 1; pState->m_pmapDeadSockets->SetAt((void*)hSocket, (void*)nCount); } AfxEnableMemoryTracking(bEnable);} 2001年的msdn是没办法查vc8中的函数的。要查就查msdn online或者2005 应该没有问题的,你是MSDN安装的问题哦。 dll/进程 达人看过来 助人为达人快乐之本 如何制作XP下的界面? 如何准确的包含所需要的头文件、lib库文件?在线等待! 有用过skinmagic的吗?请问怎么把标题栏中的"powered by skinmagic"去掉? 内网机器或者动态分配ip的机器与固定ip地址的服务器通信问题 如何在程序运行过程中改变静态控件或文本框的颜色啊 为什么我的ListBox控件的属性设置中Styles-->所有者-->设为"Variable"时,程序一运行就死掉! microran2000 进来领分 有什么方法建立多维动态数组? 请教一个REG文件的运行问题? VC中如何做动画效果 菜鸟之问!
这个函数确实没有。
估计是笔误。
应该是Attach(Handle)。//
或者这是别人写的伪代码。
int nProtocolType, int nAddressFormat)
{
ASSERT(m_hSocket == INVALID_SOCKET); m_hSocket = socket(nAddressFormat,nSocketType,nProtocolType);
if (m_hSocket != INVALID_SOCKET)
{
CAsyncSocket::AttachHandle(m_hSocket, this, FALSE);
return AsyncSelect(lEvent);
}
return FALSE;
}
void PASCAL CAsyncSocket::AttachHandle(
SOCKET hSocket, CAsyncSocket* pSocket, BOOL bDead)
{
_AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState; BOOL bEnable = AfxEnableMemoryTracking(FALSE);
if (!bDead)
{
ASSERT(CAsyncSocket::LookupHandle(hSocket, bDead) == NULL);
if (pState->m_pmapSocketHandle->IsEmpty())
{
ASSERT(pState->m_pmapDeadSockets->IsEmpty());
ASSERT(pState->m_hSocketWindow == NULL); CSocketWnd* pWnd = new CSocketWnd;
pWnd->m_hWnd = NULL;
if (!pWnd->CreateEx(0, AfxRegisterWndClass(0),
_T("Socket Notification Sink"),
WS_OVERLAPPED, 0, 0, 0, 0, NULL, NULL))
{
TRACE(traceSocket, 0, "Warning: unable to create socket notify window!\n");
AfxThrowResourceException();
}
ASSERT(pWnd->m_hWnd != NULL);
ASSERT(CWnd::FromHandlePermanent(pWnd->m_hWnd) == pWnd);
pState->m_hSocketWindow = pWnd->m_hWnd;
}
pState->m_pmapSocketHandle->SetAt((void*)hSocket, pSocket);
}
else
{
void* pvCount;
INT_PTR nCount;
if (pState->m_pmapDeadSockets->Lookup((void*)hSocket, pvCount))
{
nCount = (INT_PTR)pvCount;
nCount++;
}
else
nCount = 1;
pState->m_pmapDeadSockets->SetAt((void*)hSocket, (void*)nCount);
}
AfxEnableMemoryTracking(bEnable);
}
要查就查msdn online或者2005