当前位置: 代码迷 >> WinCE >> 改善WINCE6.0基于RAM and ROM文件系统的设备使用便利性
  详细解决方案

改善WINCE6.0基于RAM and ROM文件系统的设备使用便利性

热度:81   发布时间:2016-04-28 12:53:23.0
改进WINCE6.0基于RAM and ROM文件系统的设备使用便利性

 1.    蓝牙接收文件默认路径的修改

\WINCE600\PUBLIC\SERVERS\OAK\FILES\servers.reg文件中,我们可以看到下面的注册表信息:

[HKEY_LOCAL_MACHINE\Software\Microsoft\Obex\Services\{00000000-0000-0000-0000-000000000000}]

"BaseDir"=\\My Documents\\DefaultInbox

这是设定保存蓝牙接收文件时候的默认路径,这个路径我们可以根据实际的需要来更改,比如,我们的系统就是在platform.reg中增加下面的内容:

[HKEY_LOCAL_MACHINE\Software\Microsoft\Obex\Services\{00000000-0000-0000-0000-000000000000}]

"BaseDir"=\\Flash Disk \\DefaultInbox

这样接收到的文件就不会因为重启而丢失了。

 

2.    保存在桌面和启动文件夹的文件重启丢失问题的处理

为避免保存在桌面(Desktop)和启动文件夹(StartUp)的文件重启后丢失,我们在platform.reg中增加下面的内容:

[HKEY_LOCAL_MACHINE\System\Explorer\Shell Folders]

IF LOCALE==0804

        "Desktop"="\\SysDisk\\桌面"

ELSE

        "Desktop"="\\SysDisk\\Desktop"

ENDIF

"StartUp"=\\SysDisk\\StartUp

这样,可以把桌面映射到flashSysDsik这个分区中,重启后桌面上和启动文件夹里的文件就不会丢失了,但因为桌面和启动文件夹重新映射到SysDisk目录下,所以windows目录下的桌面和启动文件夹就无效了,而变成SysDisk目录下的桌面和启动文件夹是有效的。

 

3.    汉王输入的安装

默认情况下,需要把HANWANG文件夹复制到手持机的Windows目录下,然后运行注册表信息就可以安装并使用汉王输入法了,但如果把HANWANG文件夹保存在Windows目录下,重启之后必然会丢失,如何解决这个问题呢?我们先来看汉王输入法的《写入注册表》这个注册表文件的内容:

REGEDIT4

 

[HKEY_CLASSES_ROOT\CLSID\{C762BD63-52D5-4768-AD7A-14DB04C98308}\DefaultIcon]

@="\\Windows\\HanWang\\HWZZH\\HWZZH.dll,0"

 

[HKEY_CLASSES_ROOT\CLSID\{C762BD63-52D5-4768-AD7A-14DB04C98308}\InprocServer32]

@="\\Windows\\HanWang\\HWZZH\\HWZZH.dll"

 

[HKEY_CLASSES_ROOT\CLSID\{C762BD63-52D5-4768-AD7A-14DB04C98308}\IsSIPInputMethod]

@="1"

 

[HKEY_CURRENT_USER\Software\Hanvon\HWPEN\ZZH\Register]

"KEY"="TQTQK7458A3PZH6"

"USER"=""

"ID-2"=""

"ID-1"=""

"PSN"=""

 

[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH]

"HWDriverName"="\\Windows\\touch.dll"

"DriverName"="\\Windows\\HanWang\\HWTouch3.dll"

 

[HKEY_LOCAL_MACHINE\SOFTWARE\Hanvon\HWPEN\ZZH\About]

"Version"="09.09.01"

"Path"="\\Windows\\HanWang\\HWZZH"

"PID"=dword:00000000

"Owner"="HWTAC"

 

[HKEY_CLASSES_ROOT\CLSID\{C762BD63-52D5-4768-AD7A-14DB04C98308}]

@="汉王输入法"

 

[HKEY_CLASSES_ROOT\CLSID\{C762BD63-52D5-4768-AD7A-14DB04C98308}\DefaultIcon]

@="\\Windows\\HanWang\\HWZZH\\HWZZH.dll,0"

 

[HKEY_CLASSES_ROOT\CLSID\{C762BD63-52D5-4768-AD7A-14DB04C98308}\InprocServer32]

@="\\Windows\\HanWang\\HWZZH\\HWZZH.dll"

 

[HKEY_CLASSES_ROOT\CLSID\{C762BD63-52D5-4768-AD7A-14DB04C98308}\IsSIPInputMethod]

@="1"

 

比如我们可以把HANWANG文件夹复制到手持机的SysDisk这个flash分区目录下,除了"HWDriverName"="\\Windows\\touch.dll"

中的Windows之外,把上面《写入注册表》注册表文件中的其他Windows改为替换为SysDisk之后,然后运行修改之后的《写入注册表》就可以安装了,安装之后不需要重启就可以使用,重启之后也可以正常使用了。

 

4.    LoadLibraryCreateProcess函数的使用

对于应用开发人员来说,需要用到的dll.exe或是其他文件一般情况下是放在windows目录下的,但因为我们选择的RAM and ROM文件系统,重启之后保存在windows目录下为文件就会丢失,如何解决这个问题呢?比如C5000W,我们可以把dll或是.exe拷贝到windows目录,对于动态调用来说,可用LoadLibrary函数来把gprsdll.dll来映射到当前使用进程的地址空间中,接着就可以调用GetProcAddress函数来获取gprsdll.dll提供的API(函数)地址,然后就可以通过获取的函数地址来调用API函数了,如:

HINSTANCE       hGprsinst = LoadLibrary(L”gprsdll.dll”);

系统首先会去启动exe的文件路径下搜索gprsdll.dll,如果找不到;就去windows目录下搜索,如果还是找不到;就到OEM(这里OEM是指我们成为)指定的查找路径下搜查,如果在这里依旧找不到就返回失败了。

那对于旋转RAM and ROM文件系统的设备来说,该怎么使用LoadLibrary函数呢?有下面的三种方式:

 

使用绝对路径

我们可以把gprsdll.dll拷贝到Flash Disk这个flash分区对应的目录下,不管我们的应用程序保存在哪个目录下,只要具体制定的目录下有需要的gprsdll.dll,都可以正常使用LoadLibrary函数来把gprsdll.dll映射到当前使用进程的地址空间中,如下所示:

HINSTANCE       hGprsinst = LoadLibrary(L” \\Flash Disk\\gprsdll.dll”);

 

gprsdll.dll放在和exe文件一个目录下

比如gprsdll.dlltest.exe都在Flash Disk目录下,就可以和之前的用法一样,不需要制定具体路径:

HINSTANCE       hGprsinst = LoadLibrary(L”gprsdll.dll”);

 

OEMHKEY_LOCAL_MACHINE\Loader注册表项指定搜索目录

platform.reg中增加下面的注册表内容:

[HKEY_LOCAL_MACHINE\Loader]

  "SystemPath"=multi_sz:"SysDisk\\","Flash Disk\\","Storage Card\\"

这表示我们指定在调用LoadLibrary或是CreateProcess函数时,系统最后依次去SysDiskFlash DiskStorage Card目录下搜索gprsdll.dll,当然了,假如gprsdll.dll就在SysDisk目录下面,系统在搜索到SysDisk的时候就停止搜索了。

 

上面是OEM指定的路径,用户也可以修改,比如我要把gprsdll.dll保存在Flash Disk目录的dll文件夹下面,用户可以用windows目录下的RegEdit工具来修改,一定要记住在增加的dll文件夹后面加上\这个符号,修改之前如下图:

1

增加dll,如下图所示:

2

修改之后重启才能生效,这样重启之后我们可以把把gprsdll.dll保存在Flash Disk\dll文件夹下面,然后用LoadLibrary(L”gprsdll.dll”)来使用了。

 

上面对LoadLibrary函数路径的使用,也适用于CreateProcess函数,根据上面的分析,最有效率的是第(1)和第(2)种方式,也推荐使用这两种方式。由此可见客户可以把需要的dllexe保存flash或是TF卡中,在编程的时候指定绝对路径就可以了,当然也可以不指定,但是一定要把dllexe文件保存上面第(3)点提到的注册表[HKEY_LOCAL_MACHINE\Loader]SystemPath指定的路径下,不过因为这种方式虽然对于编程来说方便一些,但是效率相对(1)和第(2)种方式会低一些,故不推荐。

 

5.    程序部署的路径

在默认的情况下VS2005VS2008在部署程序的时候,默认部署到设备的Program Files目录下的,但因为我们采用RAM and ROM文件系统,部署在Program Files目录下的文件重启后会丢失,我们可以通过修改应用程序工程属性的部署路径来解决这个问题,工程文件属性Debugging的修改如下图所示:

3

工程文件属性Deployment的修改如下图所示:

4

做上面的修改之后,VS2005VS2008的程序就可以部署到设备的Flash Disk目录,这样重启就不会丢失了,当然也可以根据客户的需要部署到其他目录下。

 

 

  相关解决方案