为什么CAsyncSocket::AttachHandle在msdn中查不到呢?CSocket类的Create()函数是通过调用CAsyncSocket类Create函数实现的。CAsyncSocket类Create函数先调用CAsyncSocket类的Socket函数,而Socket函数执行后,就执行CAsyncSocket::AttachHandle函数,而这个函数我在2001 1月的msdn中查不到啊?

解决方案 »

  1.   

    AttachHandle
    这个函数确实没有。
    估计是笔误。
    应该是Attach(Handle)。//
    或者这是别人写的伪代码。
      

  2.   

    有的。楼上的可以查看一下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;
    }
      

  3.   

    // In VC2005 C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\src\mfc\sockcore.cpp
    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);
    }
      

  4.   

    2001年的msdn是没办法查vc8中的函数的。
    要查就查msdn online或者2005
      

  5.   

    应该没有问题的,你是MSDN安装的问题哦。