很奇怪,我在win32 console程序里PacketGetAdapterNames,可以正常读出网卡信息,可如果我在mfc exe程序的InitInstance()里使用PacketGetAdapterNames,却是返回错误, 这是为什么呢? 代码如下:
BOOL CNetcard_setupApp::InitInstance()
{
AfxEnableControlContainer();
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif
CNetcard_setupDlg dlg;
m_pMainWnd = &dlg;
if(PacketGetAdapterNames((char *)adaptername,&adapterlength)==FALSE)
{
printf("PacketGetAdapterNames Error: %d\n",GetLastError());
return false;
}

解决方案 »

  1.   

    我的很正常啊。
    adaptername 和 adapterlength 初始化了没?
      

  2.   

    和Unicode有关,Packet函数要求的字符串参数好像是要双字节的字符串
    我记得以前我的解决办法是自己封装一下PacketXXX库,做成一个DLL让MFC程序调用的
      

  3.   

    有初始化。否则在console 32 application下是PacketGetAdapterNames函数不可能返回true。
    代码如下:
    WCHAR    adaptername[8192];
    ULONG    adapterlength;为什么在mfc exe下PacketGetAdapterNames函数返回false呢?
      

  4.   

    用pcap_lookupdev就可以了,看一下winpcap3.0的例子