如题,MFC的工程向导会为我生成这样的一段CWinApp的代码:BOOL CDialog006App::InitInstance()
{
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}我想问的是, 这个地方如果我把AfxSocketInit换成WSAStartup,会不会导致这个MFC程序出什么问题
AfxSocketInit做的工作难道更多么?
{
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}我想问的是, 这个地方如果我把AfxSocketInit换成WSAStartup,会不会导致这个MFC程序出什么问题
AfxSocketInit做的工作难道更多么?
只不过该做的工作他们替你做好了就留个函数给你直接调用
BOOL AFXAPI AfxSocketInit(WSADATA* lpwsaData)
{
// Reference the start up function to pull in wsock32.dll
// This is to prevent problems with delay loading wsock32.dll from mfc*.dll
// WSAStartup should never be NULL
if (WSAStartup != NULL)
return _AfxSocketInit(lpwsaData);
return FALSE;
}
调用了_AfxSocketInit()函数,_AfxSocketInit()函数的定义:#ifndef _AFXDLL
BOOL AFXAPI AfxSocketInit(WSADATA* lpwsaData)
#else
BOOL AFXAPI _AfxSocketInit(WSADATA* lpwsaData)
#endif
{
_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();
WSASetLastError (WSAVERNOTSUPPORTED);
return FALSE;
} // setup for termination of sockets
pState->m_pfnSockTerm = &AfxSocketTerm;
}#ifndef _AFXDLL
//BLOCK: setup maps and lists specific to socket state
{
_AFX_SOCK_THREAD_STATE* pThreadState = _afxSockThreadState;
if (pThreadState->m_pmapSocketHandle == NULL)
pThreadState->m_pmapSocketHandle = new CMapPtrToPtr;
if (pThreadState->m_pmapDeadSockets == NULL)
pThreadState->m_pmapDeadSockets = new CMapPtrToPtr;
if (pThreadState->m_plistSocketNotifications == NULL)
pThreadState->m_plistSocketNotifications = new CPtrList;
}
#endif return TRUE;
}