您的位置:软件 > 开发者网络 > 微软开发专栏 > 技术专题 > 正文
使用.NET智能版进行SIM编程
[文章信息]
作者:Gregor Noriskin
时间:2003-08-28
出处:微软
责任编辑:方舟
[文章导读]
学习如何使用SIM管理器API、.net智能版的Interop服务创建用于Pocket PC Phone的应用程序
advertisement
热点推荐
· 天极网软件频道改版调查
· 在ASP.NET程序中创建唯一序号
· 用JVM工具接口创建调试和分析代理
· Win 2000如何安装配置防火墙
· 防范Windows消息钩子的侵入
[正文]

上一页  1 2  

  SIM Anyplace 示例

  该示例是使用 Microsoft Visual Studio? .NET、C#、SDE 和 .NET CF 创建的 Pocket PC Phone 的示例应用程序。它展示了如何使用 SIM 管理器 API 访问 SIM 卡。该应用程序包含一个窗体:

  此示例的用途仅限于通过敲击“获取 SIM 信息”按钮从 SIM 卡获取一般信息。但是,通过使用此示例的结构可以将其用途扩展至包含更多的 SIM 管理器 API 功能。

  代码演练

  要使用 Compact Framework 的 Interop 服务,需要添加以下代码:

using System.Runtime.InteropServices;

  创建类 SIMWrap 来存储 Windows API 的原型,该示例需要以下原型:

[DllImport("cellcore.dll")]
public static extern int SimInitialize(uint dwFlags,
int lpfnCallBack, uint dwParam, ref int lphSim);

[DllImport("cellcore.dll")]
public static extern int SimGetPhonebookStatus(int hSim,
uint dwLocation, ref uint lpdwUsed, ref uint lpdwTotal);

[DllImport("cellcore.dll")]
public static extern int SimGetDevCaps(int hSim,
uint dwCapsType, ref SimCaps lpSimCaps);

[DllImport("cellcore.dll")]
public static extern int SimGetSmsStorageStatus(int hSim,
uint dwStorage, ref uint lpdwUsed, ref uint lpdwTotal );

[DllImport("cellcore.dll")]
public static extern int SimDeinitialize(int hSim);

  每个原型均具有一个指向 DLL(动态链接库,在其中执行函数)的 DllImport 属性,在本例中为 cellcore.dll。创建这些原型时,Visual Studio .NET 帮助文件提供了一个包含类型映射的极好表格(请在索引中查找“平台调用”和“数据类型”)。例如,本地类型“DWORD”映射到管理类型“UInt32”,UInt32 为 C# 中的一个“单位”。

  用于获取 SIM 卡功能的调用 (SimGetDevCaps) 包含一个由引用 (lpSimCaps) 作为最后参数传递的结构。本地 (C++) 结构如下所示:

typedef struct simcaps_tag {
DWORD cbSize;
DWORD dwParams;
DWORD dwPBStorages;
DWORD dwMinPBIndex;
DWORD dwMaxPBIndex;
DWORD dwMaxPBEAddressLength;
DWORD dwMaxPBETextLength;
DWORD dwLockFacilities;
DWORD dwReadMsgStorages;
DWORD dwWriteMsgStorages;
DWORD dwNumLockingPwdLengths;
SIMLOCKINGPWDLENGTH rgLockingPwdLengths[SIM_NUMLOCKFACILITIES];
} SIMCAPS, FAR *LPSIMCAPS;

  当 SIM_NUMLOCKFACILITIES 等于 10 时,相同结构的 Compact Framework 版本如下所示:

[StructLayout(LayoutKind.Sequential)]
public struct SimCaps
{
public uint cbSize;
public uint dwParams;
public uint dwPBStorages;
public uint dwMinPBIndex;
public uint dwMaxPBIndex;
public uint dwMaxPBEAddressLength;
public uint dwMaxPBETextLength;
public uint dwLockFacilities;
public uint dwReadMsgStorages;
public uint dwWriteMsgStorages;
public uint dwNumLockingPwdLengths;
public SimLockingPwdLength rgLockingPwdLengths0;
public SimLockingPwdLength rgLockingPwdLengths1;
public SimLockingPwdLength rgLockingPwdLengths2;
public SimLockingPwdLength rgLockingPwdLengths3;
public SimLockingPwdLength rgLockingPwdLengths4;
public SimLockingPwdLength rgLockingPwdLengths5;
public SimLockingPwdLength rgLockingPwdLengths6;
public SimLockingPwdLength rgLockingPwdLengths7;
public SimLockingPwdLength rgLockingPwdLengths8;
public SimLockingPwdLength rgLockingPwdLengths9;
}

  请注意,即使 MarchalAsAttribute 类在 Compact Framework (Beta 1) 中不受支持,通过使用附加后缀 (0-9) 将阵列添加为成员几乎可以实现相同的结构。实际上,这些成员属于另一种结构 (SimLockingPwdLength)。

  声明适当时,“获取 SIM 信息”按钮所表示的代码如下所示:

SimWrap.SimCaps simCaps = new SimWrap.SimCaps();
int hSim = 0;
uint phoneUsed = 0;
uint phoneTotal = 0;
uint smsUsed = 0;
uint smsTotal = 0;

// 清空 ListView
lvwItems.Items.Clear();

// 启动 SIM 管理器会话(获取句柄)
SimWrap.SimInitialize(0, 0, 0, ref hSim);

// 获取电话簿状态(使用部分、全部)
SimWrap.SimGetPhonebookStatus(hSim, SimWrap.SIM_PBSTORAGE_SIM,
ref phoneUsed, ref phoneTotal);
AddToListView("Total phonebook size:", phoneTotal.ToString());
AddToListView("Phonebook entries:", phoneUsed.ToString());

// 获取 SIM 功能
SimWrap.SimGetDevCaps(hSim, SimWrap.SIM_CAPSTYPE_ALL, ref simCaps);
AddToListView("Max. length of name:",
simCaps.dwMaxPBETextLength.ToString());
AddToListView("Max. length of phone number:",
simCaps.dwMaxPBEAddressLength.ToString());

// 获取消息 (SMS) 状态(使用部分、全部)
SimWrap.SimGetSmsStorageStatus(hSim, SimWrap.SIM_SMSSTORAGE_SIM,
ref smsUsed, ref smsTotal);
AddToListView("SMS message storage capacity:", smsTotal.ToString());
AddToListView("SMS messages:", smsUsed.ToString());

// 结束 SIM 管理器会话
SimWrap.SimDeinitialize(hSim);

  清空 ListView 且检索 (SimInitialize) 到 SIM 管理器句柄 (hSim) 后,将调用 SIM Wrapper 类 (SimWrap) 上的每个静态方法,从而产生 API 调用。作为引用传递的变量将获取返回值,并使用代码将其添加至 ListView 中。

private void AddToListView(string Item, string Value)
{
ListViewItem lvi = new ListViewItem(Item);
lvi.SubItems.Add(Value);
lvwItems.Items.Add(lvi);
}

  最后,在调用 SimDeinitialize 时将释放 SIM 管理器句柄 (hSim)。

  小结

  由于 Pocket PC Phone 是移动电话家族的重要成员,因此在创建大型的连接应用程序时可以利用其功能,例如 SIM 卡。使用 SIM 管理器 API、Compact Framework 的 Interop 服务以及 .NET 开发环境,可以获得实现这一功能的工具。


上一页  1 2  

·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • 移动数据库开发教程
  • Motorola手机应用程序设计入门
  • 用MIDP实现贪吃蛇游戏(一)
  • 用Game API制作二维动作游戏
  • .Net Framework智能版开发移动游戏
  • 开发Smartphone游戏
  • 开发Smartphone应用程序
  • 手机游戏开发综述
  • 主板超频特色技术GIGA技嘉篇
  • Win 2000如何安装配置防火墙
  • 防范Windows消息钩子的侵入
  • 性价比之选 AGP显卡的告别秀
  • 大学校园生活之聊天也疯狂
  • Fireworks制作GIF动画Banner
  • 金山打击外挂 遭网络游戏玩家起诉
  • 完全公测《开天》掀起滔滔巨浪
  • Advertisement