2012-07-06 134 views
0

我需要获取Windows Mobile设备的MAC address。是否有可能不使用OpenNetCF,而只使用.NET Compact Framework?解决方案使用C#(Visual Studio 2008,智能设备项目)。从网络适配器读取MAC地址

看了Read MAC Address from network adapter in .NET,我希望通过底座使用的例子,但有在该设备上没有KERNEL32.DLL。

有aother方式.NET Compact Framework中获得的MAC地址,或者我怎么能取代以下方法:

 [DllImport("Kernel32.dll", EntryPoint = "CopyMemory")] 
    private static extern void ByteArray_To_IPAdapterInfo(ref AdapterInfo dst, Byte[] src, int size); 
    [DllImport("Kernel32.dll", EntryPoint = "CopyMemory")] 
    private static extern void IntPtr_To_IPAdapterInfo(ref AdapterInfo dst, IntPtr src, int size); 

回答

0

如果你想获得的MAC地址,但没有使用像库OpenNETCF的SDF则只需要在自己的代码中做同样的事情。你需要的P/Invoke GetAdaptersInfo,这样的事情:

[DllImport("iphlpapi.dll", SetLastError = true)] 
public static extern int GetAdaptersInfo(byte[] pAdapterInfo, ref uint pOutBufLen); 

你要与null第一个参数调用它一次获得的大小,然后分配适当大小的字节数组,并调用它。它将用一系列IP_ADAPTER_INFO结构填充它,然后您可以对系统中的每个适配器进行解析。该成员是您在MAC地址之后的成员。

+0

但是,我应该如何将接收到的字节数组转换为结构数组?或者我应该如何从字节数组中提取每个结构? – horgh 2012-07-08 16:16:27

+0

在前面提到的问题中,plinth使用了kernel32.dll(IntPtr_To_IPAdapterInfo,ByteArray_To_IPAdapterInfo)中的方法。但是kernel32.dll在windows mobile上不可用(不是吗?)。 – horgh 2012-07-08 16:18:19

+0

我使用不安全的代码解析了SDF代码中的字节数组,因为它似乎是最快的方法。您可以轻松地创建一个sruct并根据成员设置变量。如果你想要的只是MAC,你实际上可以从结果数组中以适当的偏移量复制到地址字节的本地数组中。 – ctacke 2012-07-08 23:04:24