我通过调用外部函数 DllImport( "sms.dll ") SmsGetPhoneNumber获取本机号码,
编译没有问题,但是运行时报错如下。
Can 't find PInvoke DLL 'sms.dll '.
提示为
如果类库中的某个方法已被移除或重命名,请重新编译引用该方法的所有程序集。
此异常通常在试图动态访问未通过其强名称引用的程序集中已删除或重命名的方法时引发。
但是我查msdn sms.dll 中有SmsGetPhoneNumber函数。
程序如下:
[DllImport( "sms.dll ")]
private static extern IntPtr SmsGetPhoneNumber(IntPtr psmsaAddress);
unsafe public static PhoneAddress GetPhoneNumber()
{
PhoneAddress phoneaddr = new PhoneAddress();
Byte[] buffer = new Byte[516];
fixed (byte* pAddr = buffer)
{
IntPtr res = SmsGetPhoneNumber((IntPtr)pAddr);
if (res != IntPtr.Zero)
throw new Exception( "Could not get phone number from SIM ");
byte* pCurrent = pAddr;
phoneaddr.AddressType = (AddressType)Marshal.ReadInt32((IntPtr)pCurrent);
pCurrent += Marshal.SizeOf(phoneaddr.AddressType);
phoneaddr.Address = Marshal.PtrToStringUni((IntPtr)pCurrent);
}
return phoneaddr;
}
请问如何解决。
------解决方案--------------------
看看SmsGetPhoneNumber返回什么结果,现在的SIM卡里一般都不存储电话号码。因此这个函数经常会失败