#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);
}
这段代码那里有问题? 多谢。
#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);
}
这段代码那里有问题? 多谢。
Access Violation
exception in Test.exe: 0xC0000005: Access Violation
{
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的那一句
请大家帮忙看看
{
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);
}
后一次贴的应该可以了吧?
...
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);
}
不知为什么???