在xpe下获取mac地址失败,但是在xp下是正常的,帮我看一下

银点 2010-06-09 11:49:24

AnsiString __fastcall TMainForm::GetLocalMac()
{
typedef struct _ASTAT
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuffer[30];
}ASTAT, *PASTAT;

ASTAT Adapter;
NCB ncb;
UCHAR uRetCode;
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command=NCBRESET;
ncb.ncb_lana_num=0;
Netbios(&ncb);
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command=NCBASTAT;
ncb.ncb_lana_num=0;
strcpy((char *)ncb.ncb_callname,"* ");
ncb.ncb_buffer=(unsigned char *) &Adapter;
ncb.ncb_length=sizeof(Adapter);
uRetCode=Netbios(&ncb);
AnsiString str="";
if(uRetCode == 0)
{
str.printf("%02x-%02x-%02x-%02x-%02x-%02x",
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5] );
return str;
}
else
{
return "MAC Error!";
}
}


netbios反回值是0x23,指ncb.ncb_lana_num=0无效

但是此函数在xp下都是正常的,在XPE下失败
...全文
154 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 silverpot 的回复:]
我明明发在基础里,怎么成了水版贴了?
[/Quote]

眼花了吧。可没人动过你的帖子。
周药师 2010-06-09
  • 打赏
  • 举报
回复
待会让妖哥 移到基础板块
银点 2010-06-09
  • 打赏
  • 举报
回复
我明明发在基础里,怎么成了水版贴了?
银点 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zzbinfo 的回复:]

试试这段代码可以么,没有xpe下执行过,我也不知道结果

C/C++ code
//----------------------------------------------------------------
// Fetches the MAC address and prints it
DWORD GetMACaddress(TStringList *MacList)
{
i……
[/Quote]
十分感谢,根据你的代码,我查了MSDN中GetAdaptersInfo用法,问题解决 了
ccrun.com 2010-06-09
  • 打赏
  • 举报
回复
o
银点 2010-06-09
  • 打赏
  • 举报
回复
妖哥,帮忙把它移到技术区去吧
zzbinfo 2010-06-09
  • 打赏
  • 举报
回复
static void PrintMACaddress(unsigned char MACData[],TStringList *MacList)
{
char macdate[256];
if(MacList == NULL) return ;
sprintf(macdate,"%02X%02X%02X%02X%02X%02X",MACData[0], MACData[1],
MACData[2], MACData[3], MACData[4], MACData[5]);
MacList->Add(AnsiString(macdate));

}
zzbinfo 2010-06-09
  • 打赏
  • 举报
回复
试试这段代码可以么,没有xpe下执行过,我也不知道结果

//----------------------------------------------------------------
// Fetches the MAC address and prints it
DWORD GetMACaddress(TStringList *MacList)
{
if(MacList == NULL) return -1;
DWORD MACaddress = 0;
IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information
// for up to 16 NICs
DWORD dwBufLen = sizeof(AdapterInfo); // Save memory size of buffer

DWORD dwStatus = GetAdaptersInfo( // Call GetAdapterInfo
AdapterInfo, // [out] buffer to receive data
&dwBufLen); // [in] size of receive data buffer
assert(dwStatus == ERROR_SUCCESS); // Verify return value is
// valid, no buffer overflow

PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo; // Contains pointer to
// current adapter info
do {
if (MACaddress == 0)
MACaddress = pAdapterInfo->Address [5] + pAdapterInfo->Address [4] * 256 +
pAdapterInfo->Address [3] * 256 * 256 +
pAdapterInfo->Address [2] * 256 * 256 * 256;
PrintMACaddress(pAdapterInfo->Address,MacList); // Print MAC address
pAdapterInfo = pAdapterInfo->Next; // Progress through linked list
}
while(pAdapterInfo); // Terminate if last adapter

return MACaddress;
}

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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