#include <Iphlpapi.h>
#pragma comment(lib,"Iphlpapi.lib");
struct TT{
int i;};struct TEST{
TT tt[10];
int len;
};
BOOL CTestDlg::GetTest(TEST &test)
{
IP_ADAPTER_INFO AdapterInfo;
    ULONG OutBufLen=0;
    if(GetAdaptersInfo(&AdapterInfo,&OutBufLen)!=ERROR_SUCCESS)//get OutBufLen value
{
    if(GetAdaptersInfo(&AdapterInfo,&OutBufLen)!=ERROR_SUCCESS)//GetAdaptersInfo
{
OutputDebugString("Fail GetAdaptersInfo");
return FALSE;
}
}
test.tt[0].i=AdapterInfo.Index;//VC提示该处有问题
return TRUE;
}void CTestDlg::OnOK() 
{
// TODO: Add extra validation here
TEST test;
GetTest(test);
}
这段代码那里有问题?  多谢。

解决方案 »

  1.   

    提示的是什么问题呢?是不是Index应该小写?
      

  2.   

    To happyparrot(快乐鹦鹉)老大:
                Access Violation
      

  3.   

    错误提示:
    exception in Test.exe: 0xC0000005: Access Violation
      

  4.   

    void getNetwork(char* adapinfo)
    {
    DWORD             dwResult;
    ULONG             OutBufLen;
    IP_ADAPTER_INFO   AdapterInfo;
       PIP_ADAPTER_INFO  pAdapterNext;
    OutBufLen = sizeof(IP_ADAPTER_INFO);
    dwResult  = GetAdaptersInfo(&AdapterInfo,&OutBufLen);
    if(dwResult == ERROR_BUFFER_OVERFLOW)
    {
    GetAdaptersInfo(&AdapterInfo,&OutBufLen);
    }
    else if (dwResult != ERROR_SUCCESS)
    {
    sprintf(adapinfo,"GetAdaptersInfo Error: %d\n",GetLastError());
    return;
    } pAdapterNext = &AdapterInfo;
    while(pAdapterNext != NULL)
    {
    printf("AdapName:\t %s\n",pAdapterNext->AdapterName);
    //strcpy(adapinfo,pAdapterNext->AdapterName);
    //sprintf(adapinfo,"%s",pAdapterNext->AdapterName);
    //memcpy((char *)adapinfo,pAdapterNext->AdapterName,strlen(pAdapterNext->AdapterName));
    pAdapterNext = pAdapterNext->Next;
    }
    return;
    }void main()
    {
    char netinfo[50];
    ZeroMemory(netinfo,sizeof(netinfo)/sizeof(char));
    printf("+++++++++++++++++++++++++++++++++\n");
    getNetwork(netinfo);
    printf("%s",netinfo);
    }
    大家帮忙看看这段代码
    如果是在单网卡的机器上
    注释的代码无论那一句都能正常运行
    但是在双网卡的机器上
    只能运行printf的那一句
    请大家帮忙看看
      

  5.   

    void getNetwork(char* adapinfo)
    {
    DWORD             dwResult;
    ULONG             OutBufLen;
    PIP_ADAPTER_INFO   AdapterInfo;
       PIP_ADAPTER_INFO  pAdapterNext; AdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
    OutBufLen = sizeof(IP_ADAPTER_INFO); OutBufLen = sizeof(IP_ADAPTER_INFO);
    dwResult  = GetAdaptersInfo(AdapterInfo,&OutBufLen);
    if(dwResult == ERROR_BUFFER_OVERFLOW)
    {
    GlobalFree (AdapterInfo);
    AdapterInfo = (IP_ADAPTER_INFO *) malloc ( sizeof(OutBufLen) );
    GetAdaptersInfo(AdapterInfo,&OutBufLen);
    }
    else if (dwResult != ERROR_SUCCESS)
    {
    sprintf(adapinfo,"GetAdaptersInfo Error: %d\n",GetLastError());
    return;
    } pAdapterNext = AdapterInfo;
    int i=0;
    while(pAdapterNext != NULL)
    {
    printf("AdapName:\t %d %s\n",i,pAdapterNext->AdapterName);
    //strcpy(adapinfo,pAdapterNext->AdapterName);
    int j =strlen(adapinfo);
    //printf("adapter name length is: %d\n",pAdapterNext->AdapterName);
    sprintf(adapinfo + j,"%d %s",i,pAdapterNext->AdapterName);
    //i++;*/
    //memcpy((char *)adapinfo,"1234656",50);
    pAdapterNext = pAdapterNext->Next;
    }
    return;
    }void main()
    {
    char netinfo[300];
    ZeroMemory(netinfo,sizeof(netinfo)/sizeof(char));
    printf("+++++++++++++++++++++++++++++++++\n");
    getNetwork(netinfo);
    printf("netinfo :%s",netinfo);
    }
      

  6.   

    是不是getNetwork(netinfo)返回时出错?
      

  7.   

    TO byf2002(调侃2002) :
    后一次贴的应该可以了吧?
      

  8.   

    byf2002(调侃2002) :   还是不明白,为什么你的代码console下可以,而移到MFC APP下却有问题。???
      

  9.   

    另外我的代码改成如下好象就可以:
     ...
    BOOL CTestDlg::GetTest(TEST &test,IP_ADAPTER_INFO &AdapterInfo)
    {
    test.tt[0].i=AdapterInfo.Index;//不在有问题
    return TRUE;
    }void CTestDlg::OnOK() 
    {
    // TODO: Add extra validation here
    IP_ADAPTER_INFO AdapterInfo;
        ULONG OutBufLen=0;
        if(GetAdaptersInfo(&AdapterInfo,&OutBufLen)!=ERROR_SUCCESS)//get OutBufLen value
    {
        if(GetAdaptersInfo(&AdapterInfo,&OutBufLen)!=ERROR_SUCCESS)//GetAdaptersInfo
    {
    OutputDebugString("Fail GetAdaptersInfo");
    return FALSE;
    }
    }
    TEST test;
    GetTest(test);
    }
    不知为什么???