今日学习成果

一、微软有个例子程序,演示了如何在 Windows Mobile 模拟器中模拟电话呼叫事件以及短信到达事件。这个例子的年代太久远了,以至于老汉没有搞清状况就盲目学习,发现编译过去之后部署到模拟器上怎么都不能运行。网上有无数的人在问这个问题,没有人回答。经过老汉的不懈努力,得出以下结论:
1、该示例不可以在 Visual Studio 2005 附带的模拟器及其以上版本中运行。原因是,例子中微软提供了一个不开源的动态库,需要将之部署到模拟器中,但是,该动态库的目标机器指令集为 x86,并非新的模拟器所模拟的 ARM CPU 指令集。因此,当你尝试加载此动态链接库的时候,系统会报告以下错误:

An unhandled exception of type ‘System.MissingMethodException’ occurred in FrilStub.exe
Additional information: Can’t find PInvoke DLL ‘FRilDll.dll’.

2、如果非要运行该示例,需要安装 Visual Studio .Net 2003,以及 Microsoft Pocket PC 2003 SDK 或者 Microsoft SMARTPHONE 2003 SDK。仅安装 Visual Studio .Net 2003 其实已经安装上了模拟器和 Windows Mobile 2002 的映像,但是,例子程序的执行需要 Windows Mobile 2003 的环境,故而需要安装 Microsoft Pocket PC 2003 SDK 或者 Microsoft SMARTPHONE 2003 SDK,而且需要密切关注安装顺序,在 SDK 的下载页面中有详细描述和相应警告。

个人认为,为了不干扰你现有的 Visual Studio 2005 的正常工作,最好把上述软件安装到另外的机器上,或者虚拟机上。如果你选择了后者,请对模拟器在虚拟机中的运行速度有充分的耐心,老汉测试的结果是,模拟器第一次完全启动需要大约半个小时。虚拟机内的系统是 Windows 2000 Server,不过我的虚拟机分配的内存不多,才 128MB。

另外还有一个意外的收获,老汉最开始想让该工程在 Visual Studio 2005 中运行,结果还没到调用那个不兼容的动态库的时候,首先连接模拟器就不能成功。找资料才发现,Visual Studio 2003 和 Visual Studio 2005 下与模拟器通讯的方式有较大的变化。前者需要在工程中引用三个动态库:ConMan.dll、ConManDataStore.dll、ConManServer.dll;而后者仅需要一个动态库:Microsoft.VisualStudio.DeviceConnectivity.Interop.dll。不得已老汉改写了原例子中的 remotehelp.cs,使之既可以适用于 VS2003 也可以适用于 VS2005,都实现了向远端部署文件、启动程序、查找文件等功能。(就是因为这个改动,才让老汉需要去翻那本缺了页的 C# 参考书)

二、大致明白了自己开发的 IE 工具栏怎样才能也应用上 Windows XP 的 Theme。确实与 manifest 文件有关,但原来研究了好多次都没有结果,具体请参考这里。本想趁机再搞明白那个 Side-by-Side 的,一看内容还比较多,以后吧。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注