百思不得其解,高手帮忙

bluefangtian 2003-08-23 07:55:58
DWORD dwPter;
IP_ADAPTER_INFO *pIpAddr=NULL;
ULONG IpInfoSize=sizeof(pIpAddr);
dwPter=GetAdaptersInfo(pIpAddr,&IpInfoSize);
if(dwPter==ERROR_SUCCESS)
{

}
else
MessageBox("cann't get the imformation of adapter");
为什么每次运行的时候,都是执行else这边的呢?就是得不到网卡信息啊?
上面哪里有问题吗?
谢谢。
...全文
52 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rhett 2003-08-25
  • 打赏
  • 举报
回复
另外还看到一份代码,也是同上述流程实现的
http://www.experts-exchange.com/Programming/Programming_Languages/Q_20624457.html

msdn标题"Listing Addresses"的实例使用的也是上述流程
Rhett 2003-08-25
  • 打赏
  • 举报
回复
void CWinNetStatView::OnBnClickedAdapterInfo(){
IP_ADAPTER_INFO * FixedInfo;
ULONG ulOutBufLen;
DWORD dwRetVal;
IP_ADDR_STRING * pIPAddr;
CString strMsg;
CString strOutPut;
strOutPut.Format("\r\n************************************\r\n");
strMsg.Format("\t Adaptor Information\t\r\n");
strOutPut+=strMsg;
strMsg.Format("\r\n************************************\r\n");
strOutPut+=strMsg;
FixedInfo = (IP_ADAPTER_INFO *) GlobalAlloc( GPTR,
sizeof( IP_ADAPTER_INFO ) );
ulOutBufLen = sizeof( IP_ADAPTER_INFO );
if( ERROR_BUFFER_OVERFLOW == GetAdaptersInfo(FixedInfo,&ulOutBufLen))
{
GlobalFree( FixedInfo );
FixedInfo =(IP_ADAPTER_INFO *) GlobalAlloc( GPTR, ulOutBufLen );
}
if ( dwRetVal = GetAdaptersInfo( FixedInfo, &ulOutBufLen ) )
{
strMsg.Format(
"Call to GetAdaptersInfo failed. Return Value: %08x\r\n",
dwRetVal );
strOutPut+=strMsg;
}
else
{
strMsg.Format( "AdapterName: %s\r\n",FixedInfo->AdapterName );
strOutPut+=strMsg;
strMsg.Format( "Description: %s\r\n",FixedInfo->Description );
strOutPut+=strMsg;
}
m_TextOutput.SetWindowText(strOutPut);
}

这是codeproject上面的一个例子的部分代码,他的机制和上面的都不一样,通过全局开辟存储区,然后试探所开设的空间是否够用
{【注意】
ulOutBufLen 是通过指针传入的,如果函数执行由于ERROR_BUFFER_OVERFLOW,那么ulOutBufLen 被改为所要求的值.
}
如果不够用,释放既有空间,重新开辟合适的大小,然后才真正的开始读取ipinfo
bluefangtian 2003-08-25
  • 打赏
  • 举报
回复
IP_ADAPTER_INFO pIpAddr;
ULONG IpInfoSize=sizeof(IP_ADAPTER_INFO);
dwPter=GetAdaptersInfo(&pIpAddr,&IpInfoSize);
这样的时候每次调试到VgetAdaptersInfo()这个地方的时候就发生错误。
为什么呢?哪里不对吗?
awant2k 2003-08-24
  • 打赏
  • 举报
回复
ULONG IpInfoSize=sizeof(pIpAddr);
改为 ULONG IpInfoSize=sizeof(IP_ADAPTER_INFO);
你的是取指针的大小,而不是结构IP_ADAPTER_INFO的大小
晨星 2003-08-23
  • 打赏
  • 举报
回复
GetAdaptersInfo需要你提供一块空间来接收地址信息,然后把这块空间的地址传进来,然后该函数好按照IP_ADAPTER_INFO结构的格式把信息写道这块空间里。
千不该,万不该,你不该把NULL传进去。
Healer 2003-08-23
  • 打赏
  • 举报
回复
引用变量要初始化吧?
哦, 不是引用变量:)
那也不能随便写地址吧? 应该是内存错误。 也是要初始化的。
bluefangtian 2003-08-23
  • 打赏
  • 举报
回复
请问,谢谢了,真不知道原因,debugger到这里就出现错误了。
bluefangtian 2003-08-23
  • 打赏
  • 举报
回复
dwPter=GetAdaptersInfo(pIpAddr,&IpInfoSize);
我现在执行到这里程序就发生致命错误了,按照你的改正以后。
晨星 2003-08-23
  • 打赏
  • 举报
回复
事实上,这里没有必要使用指针变量,直接取地址不是很好吗?
IP_ADAPTER_INFO IpAddr;
ULONG IpInfoSize=sizeof(IpAddr);
dwPter=GetAdaptersInfo(&IpAddr,&IpInfoSize);
晨星 2003-08-23
  • 打赏
  • 举报
回复
你怎么用空指针去接收信息?
IP_ADAPTER_INFO *pIpAddr = new IP_ADAPTER_INFO;
ULONG IpInfoSize=sizeof(*pIpAddr);//这里少了星号。
dwPter=GetAdaptersInfo(pIpAddr,&IpInfoSize);

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧