参照网上的例子我在BCB里写了这个取网卡地址的程序,但是没有取出来,大家帮忙看看哪错了

shien 2003-05-13 09:24:58
void TForm1::getmac_one (int lana_num)

{
NCB ncb;
UCHAR uRetCode;

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = lana_num ;// 指定网卡号

// 首先对选定的网卡发送一个NCBRESET命令,以便进行初始化

uRetCode = Netbios( &ncb );
printf( "The NCBRESET return code is: 0x%x \n", uRetCode );
Edit1->Text = uRetCode;
memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = lana_num; // 指定网卡号
strcpy((char *)ncb.ncb_callname,"*" );
ncb.ncb_buffer = (unsigned char *) &Adapter; // 指定返回的信息存放的变量
ncb.ncb_length = sizeof(Adapter);
// 接着,可以发送NCBASTAT命令以获取网卡的信息

uRetCode = Netbios( &ncb );
printf( "The NCBASTAT return code is: 0x%x \n", uRetCode );
Edit2->Text = uRetCode;
if ( uRetCode == 0 )
{
String stemp;
// 把网卡MAC地址格式化成常用的16进制形式,如0010-A4E4-5802
printf(stemp.c_str(), "The Ethernet Number[%d] is: %02X%02X-%02X%02X-%02X%02X\n",
lana_num,
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] );

ShowMessage(stemp);
}

}


int TForm1::main()
{
NCB ncb;
UCHAR uRetCode;
LANA_ENUM lana_enum;

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBENUM;
ncb.ncb_buffer = (unsigned char *) &lana_enum;
ncb.ncb_length = sizeof(lana_enum);
// 向网卡发送NCBENUM命令,以获取当前机器的网卡信息,如有多少个网卡、每张网卡的编号等
uRetCode = Netbios( &ncb );
printf( "The NCBENUM return code is: 0x%x \n", uRetCode );
if ( uRetCode == 0 )
{
printf( "Ethernet Count is : %d\n\n", lana_enum.length);
// 对每一张网卡,以其网卡编号为输入编号,获取其MAC地址
for ( int i=0; i<lana_enum.length; ++i)
getmac_one( lana_enum.lana[i]);
}
return 0;
}




void __fastcall TForm1::FormCreate(TObject *Sender)
{
main();
}
...全文
67 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
duduwolf 2003-05-13
  • 打赏
  • 举报
回复
用NowCan的!我现在就用的是他的,嘿嘿 @_@
chifengwatch 2003-05-13
  • 打赏
  • 举报
回复
///////老侃的例子。可以用


本程序是调用API函数NetBios来获得网卡物理地址的。

//Get MAC Address
//Proto: bool MAC(char *Mac);
//return: true if success and Mac is MAC address,
// false if fail.
//
bool MAC(char *Mac)
{
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, *PASTAT;

ASTAT Adapter;

NCB ncb;
UCHAR uRetCode;
char tmp[40];
Mac[0]='\0';
memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = 0;
uRetCode = Netbios( &ncb );
if (uRetCode!=0)
{
strcat(Mac,"Init Error!");
return false;
}
memset(&ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = 0;
strcpy((char *)ncb.ncb_callname, "* " );//这个"*"代表获得本机网卡地址,换成IP地址就可以获得局域网内其他机器的网卡地址。

ncb.ncb_buffer =(unsigned char *) &Adapter;
ncb.ncb_length = sizeof(Adapter);

uRetCode = Netbios( &ncb );
if ( uRetCode == 0 )
{
for(int i=0;i<6;i++)
{
sprintf(tmp,"%02X ",(int)Adapter.adapt.adapter_address[i]);
strcat(Mac,tmp);
}
sprintf(tmp," Software: %d.%d",Adapter.adapt.rev_major,Adapter.adapt.rev_minor);
strcat(Mac,tmp);
return true;
}
else
{
strcat(Mac,"Unknown.");
return false;
}
}


myy 2003-05-13
  • 打赏
  • 举报
回复
不要用printf,可以输出到Memo,ListBox等中去

1,317

社区成员

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

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