为什么在工程里选择支持socket就不能正常运行,而建一个不支持socket的工程,我的程序就正常运行了?望高手指教。

解决方案 »

  1.   

    引用Ws2_32.lib没有?在工程里面设置,或者
    #pragma comment(lib, "Ws2_32.lib")
      

  2.   

    我刚开始建立了一个支持socket的工程,然后在设置里的link包含ws2_32.lib ,结果出现I:\study\MAC\MACDlg.cpp(311) : error C2065: 'WSAEnumProtocols' : undeclared identifier
    ,即使在文件头加#pragma   comment(lib,   "ws2_32 ")也没用。但是我建一个不支持socket的工程,头文件包含#include "Winsock2.h",再在link里包含ws2_32.lib 就能正常运行,我搞不明白支持和不支持socket怎么会有这样的差别?
      

  3.   

    #include <Winsock2.h>
    加上这个尝试下
      

  4.   


    加上这个是在不支持socket的工程里可以正常运行,但是如果在支持socket的工程里面,加了这个也没有用,不知道为什么,疑惑ing
      

  5.   

    #include "Winsock2.h"解决的是 “ undeclared identifier”错误#pragma comment(lib, "ws2_32 ")解决的是链接错误一个是编译器报的错,
    一个是连接器报的错。
      

  6.   


    额,我晕。我知道的,我是想问,为什么在支持socket的工程里,出现'WSAEnumProtocols' : undeclared identifier的错误,即使包含头文件winsock2.h也没用,但是在不支持socket的工程里,包含了头文件winsock2.h就能正常运行为什么支持和不支持socket有这样的差别?
      

  7.   

    #include <Winsock2.h>
    #pragma comment(lib, "WS2_32.lib")
      

  8.   

    把#include <winsock2.h>放到最前面
      

  9.   

    void CMACDlg::OnProt() 
    { WSADATA WSAData;
    if (WSAStartup(MAKEWORD(2,0),&WSAData)!=0)
    {
    return;
    }
    int nResult=0; DWORD nLength=0;
    nResult=WSAEnumProtocols(NULL,NULL,&nLength);
    if (nResult!=SOCKET_ERROR)
    {
    return;
    }
    if (WSAGetLastError()!=WSAENOBUFS)
    {
    return;
    }
    WSAPROTOCOL_INFO*pProtocolInfo=(WSAPROTOCOL_INFO*)new BYTE[nLength]; nRusult=WSAEnumProtocols(NULL,pProtocolInfo,&nLength);
    if(nResult==SOCKET_ERROR)
    {
    delete[] pProtocolInfo;
    return;
    }
    for(int n=0;n<nResult;n++)
    {
    m_ctrList.AddString(pProtocolInfo[n],szProtocol);
    }
    delete[] pProtocolInfo;
    WSACleanup;
    }
      

  10.   

    #include "stdafx.h"
    #include "MAC.h"
    #include "MACDlg.h"
    #include "Iphlpapi.h"
    #include  "Winsock2.h"
      

  11.   

    windows.h这个头文件包含winsock1.0的头文件 把winsock2.h提到最前