第一个你要做的是,确认自己装了最新的补丁: vs.sp5
如果还不行, 就先看mfc的源代码:
BOOL AFXAPI AfxSocketInit(WSADATA* lpwsaData)
{
_AFX_SOCK_STATE* pState = _afxSockState.GetData();
if (pState->m_pfnSockTerm == NULL)
{
// initialize Winsock library
WSADATA wsaData;
if (lpwsaData == NULL)
lpwsaData = &wsaData; WORD wVersionRequested = MAKEWORD(1, 1);
int nResult = WSAStartup(wVersionRequested, lpwsaData);
if (nResult != 0)
return FALSE; if (LOBYTE(lpwsaData->wVersion) != 1 || HIBYTE(lpwsaData->wVersion) != 1)
{
WSACleanup();
return FALSE;
} // setup for termination of sockets
pState->m_pfnSockTerm = &AfxSocketTerm;
}
#ifndef _AFXDLL
// setup maps and lists specific to socket state
{
_AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;
if (pState->m_pmapSocketHandle == NULL)
pState->m_pmapSocketHandle = new CMapPtrToPtr;
if (pState->m_pmapDeadSockets == NULL)
pState->m_pmapDeadSockets = new CMapPtrToPtr;
if (pState->m_plistSocketNotifications == NULL)
pState->m_plistSocketNotifications = new CPtrList;
}
#endif return TRUE;
}

解决方案 »

  1.   

    这里,动态连接和静态连接的区别就在这里
    #ifndef _AFXDLL

    #endif所以在这上边动脑筋要么就是static连接也不应该调用这中间的代码,这样你就需要一个自己的初始化函数,不如MyInit(), 把AfxSocketInit()的代码全部拷贝过来,中间的去掉,每个线程开始都调用MyInit()
    (反正就是在这上面做文章,我就懒得帮你试了,肯定行,不行你msg我)还有个办法,如果你能接受,那就是用 vc 5.0 :)