PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

PLM之家PLMHome-国产软件践行者

[转载电子书] C++的方式获取当前系统的MAC物理地址

[复制链接]

2017-10-11 21:24:30 2840 0

admin 发表于 2017-10-11 21:24:30 |阅读模式

admin 楼主

2017-10-11 21:24:30

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
. \2 _/ H5 o1 X0 P

+ G; W! Y# \! c. c( |9 p- Z. G7 W* B. Z
// 头文件包含
+ `  l: h1 T% D. ]' c$ _) Z% M2 b
#include "stdafx.h"
! i) S% o$ s4 J' }  [1 l#include
<WinSock2.h>
. q, S4 N: q, H' Z+ F2 t8 p0 `#include
<Iphlpapi.h>
6 G: t5 Z* W4 Z#include
<iostream>
0 T& ~, p+ L' \( A) ^; [
using namespace std;
4 X  U6 Y8 A) U1 E/ \. C
// 函数声明* n9 q8 H+ \" h7 _& f* {  ^) Y
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
) k: L6 O( N! D4 q
// 程序入口% C# k  W" X2 B
int _tmain(int argc, _TCHAR* argv[])
# j  O: l; B. [+ }, d7 P{
& l+ [' D" C% \; H  H0 P+ w   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
9 W! o1 d6 ]5 H4 b4 h
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();+ K% o+ v3 N7 G9 K% I0 {& k7 T- ?
   
//得到结构体大小,用于GetAdaptersInfo参数
$ {5 k8 E1 ^6 b; k' X
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);
) M( I" D& n6 T8 d& R  _   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
6 A; b& f5 U& ?! B
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
9 t- s* K6 j7 x% L5 C6 T8 @   
if (ERROR_BUFFER_OVERFLOW==nRel)
0 N% ?0 X, N6 D6 m    {( r/ e! w" d6 h% K$ b
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW
* a  Q3 M. o. L: J! E    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小* |# S* d6 ?6 e8 f  D7 ]3 E$ n
        
//这也是说明为什么stSize既是一个输入量也是一个输出量& [! a+ B( d& g% Z4 c* V7 B
        
//释放原来的内存空间
+ ^3 U& Q  ~$ c
        delete pIpAdapterInfo;! W% M$ g) [$ e) @( ?
        
//重新申请内存空间用来存储所有网卡信息
/ T9 G. `$ k) i2 \( J* Q2 P( @
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
( j% Z9 B0 o" W  e  `        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
5 {1 x; N; B9 ~$ w2 \
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);   
4 F  r6 b4 _& _4 i$ ~2 |) C& T6 J    }
- b* @8 `" x3 k5 m! r4 O! T& N   
if (ERROR_SUCCESS==nRel)
0 l1 U7 U4 B+ q7 ?4 ^    {
4 ?: n7 j3 j! [' h, m" I        
//输出网卡信息! d/ J. y. G7 C9 Q+ O. `+ `, T
        output(pIpAdapterInfo);) D8 \" I6 L0 Q8 B' m
    }0 L9 W& c: n) {8 n, V
   
//释放内存空间
; B; I0 t6 U+ g
    if (pIpAdapterInfo)
+ i/ v. ?3 ^1 x* g& t6 N; O    {
' V; y$ d& }) h0 E        delete pIpAdapterInfo;
3 N7 i7 a4 C# G8 g    }2 w* N. Y- g6 ]
    getchar();  `# O0 b# o4 h8 t2 ?" n7 w
   
return 0;/ S: v1 t! Z" E
}
# f0 C9 E* ?$ j# S' F
///函数作用,输出网卡信息
) W! y. E: Q" K" r& h# @
void output(PIP_ADAPTER_INFO pIpAdapterInfo)
, Y+ m! Q7 O- K- q; A& w{
( H& i! x2 h0 t! P: q8 d4 G6 ?   
//可能有多网卡,因此通过循环去判断
8 L9 R! D. `3 @( m9 |
    while (pIpAdapterInfo)' D! d) }8 h6 p; v. L* Y
    {
0 p& `* ?" H, I: v        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;/ q4 c# ^1 E  J) z4 Y+ l; U6 N
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;# N( Q8 M; }5 Z% k5 Y6 H
        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
: w+ v7 j4 W: v- E        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)
) P4 B% L. ^2 {/ N  {        
if (i==pIpAdapterInfo->AddressLength-1)
$ B/ a+ w' i% f, }- b        {* x+ |# z! @: ]5 G* \
            printf(
"%02x\n", pIpAdapterInfo->Address);' N) J+ l% P1 {* R4 u
        }) v' n+ n$ c0 a4 D" j
        
else2 a! f$ h. b" [7 N3 i
        {( w3 P! w- P  ^* P
            printf(
"%02x-", pIpAdapterInfo->Address);# }5 F" Y7 E2 F6 H8 q. P
        }, \1 \1 ~3 R% x6 |/ v
        cout
<<"网卡IP地址如下:"<<endl;
: T( X- z9 [+ ~; F9 F$ Y        
//可能网卡有多IP,因此通过循环去判断; @5 d) R4 E$ x+ D7 _8 \$ q  k" A
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
9 T( x$ K; v' |, ^6 v* C5 Q  y        
do
4 W. B3 Q# k$ L1 ]% l        {
  G0 L) `( i8 T! z- P4 _            cout
<<pIpAddrString->IpAddress.String<<endl;
3 c2 X! j7 A! O            pIpAddrString
=pIpAddrString->Next;4 m( \+ d) [) v: g( N; x- L2 D. }
        }
while (pIpAddrString);( n" V* e9 O# I1 P* q4 h
        pIpAdapterInfo
= pIpAdapterInfo->Next;
. C% e) e: r- i# e" H, E: m        cout
<<"*****************************************************"<<endl;
9 n5 c! m- e- X5 @0 q/ o    }
2 @( L) B, R2 j  u" O' e+ [3 Y/ x   
return;( s- i2 c. r: G0 ~- L( |9 |
}
' O) n% z4 G/ W) z4 g! q! w5 Y# w
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了