Symbol mc1000开发体验

拿到一个motorola mc1000的盘点机,本想在开发程序与普通桌面程序差不多,也可能是思维没有转变过来,总有种找不到出路的感觉。经过10天的摸索,终于修成正果了。现将过程记录如下:

一、准备工作

1、  我用的开发环境是的vs2008。

2、  下载Symbol开发包,虽然盘点机是motorola牌子的,但开发包的名称还是叫Symbol。下载地址:https://docs.symbol.com/downloads/SMDK-M-1.07.03.exe

3、  安装PC机与盘点机的通信软件Microsoft ActiveSync 4.5 中文版安装。

二、选择数据库

环境安装好了,很兴奋,以为这就可以开发程序了。刚开始确实挺顺利的,建个空窗体,编译正常,还可以部署上机子上,正常运行。接下来,按照开发Windows程序的思路开始动作了。

刚开始数据库选择了sqlite3,也挺好用的,主要是因没有机子,所以写的是winform程序,读取数据库,保存数据都正确。结果等拿到机子后,傻眼了。机子不支持sqlite数据库,要安装wince版本的运行库,试了几个没有成功,可能是与我用的vs2008有关。由于是新手,也不知道怎么修正,就换了microsoft推荐的sqlce数据库。Sqlce数据库在wince上能使用,同样也可以开发winform程序,导出数据后,然后拷到wince上使用。本来想用文本文件然后再到wince上,再保存到sqlce数据库中,结果发现速度太慢。

后来发现,由于商品信息格式相对固定,还不如保存到Arraylist中,然后通过二分法查找。实际测试的结果,速度还是挺快的,这是我最满意的结果。

三、激光扫描

程序好了,读取商品信息,保存盘点结果,一切正常。高兴呀O(∩_∩)O~。拿了条码一试,天那,不发红光,要晕倒了。

因为刚开始不知道要安装symbol开发包。从网上搜索motorola开发,没有找到想要的结果,后来想到motorola收购了symbol,会不会是symbol开发呢?结果正是想要的。下载安装,查看例子。发现写的测试条码扫描功能的例子,太复杂了。结果就直接用barcode控件,挺好,功能正常。继续设置屏幕亮度,坏了,包有冲突。继续查看例子,去掉不必要的代码,到最后才发现,只有几行代码是有效的,太经典了。定义编量

private Symbol.Barcode.Reader MyReader = null;

private Symbol.Barcode.ReaderData MyReaderData = null;

初始化

private void InitRead()

        {

            MyReader = new Symbol.Barcode.Reader();

            MyReaderData =

             new Symbol.Barcode.ReaderData(Symbol.Barcode.ReaderDataTypes.Text,

             Symbol.Barcode.ReaderDataLengths.DefaultText);

            MyReader.ReadNotify += new EventHandler(MyReader_ReadNotify);//定义接收事件

            MyReader.Actions.Enable();

            MyReader.Actions.Read(MyReaderData);

        }

显示扫描的条码

        private void MyReader_ReadNotify(object sender, EventArgs e)

        {

            txt_barcode.Text = MyReaderData.Text;

            txt_barcode.Focus();

            txt_barcode.Select(13, 1);

            MyReaderData.Dispose();//这一句很重要,一定要释放内存

            //以下两句话,实现连续扫码功能

            MyReaderData = MyReader.GetNextReaderData();

            MyReader.Actions.Read(MyReaderData);

、        }

到此程序完成,可以正常使用。

四、部署到盘点机

通过vs开发环境部署程序中可以看到需要安装哪些CAB包,把这些包拷到机子上,运行,提示‘不是一效的windows ce安装程序’,晕了。最后才发现是我拷的目录不正确。因为机子空间太小,所以想拷到扩展卡上安装,结果又绕了弯路,有一些包必须在系统目录下才能安装。

MC1000的机型应用程序的安装需要以下几个CAB文件:
  a) NETCFv2.wce5.armv4i.cab,这是.NET Compact Framework v2.0的一个安装包;或者NETCFv35.wce.armv4.cab ,这是.NET Compact Framework v3.5 的一个安装包;

b) symbol.all.arm.cab,这是SYMBOL的一个安装包,在Symbol提供的软件开发包中;

c) sqlce30.dev.CHS.wce5.armv4i.CAB,sqlce30.repl.wce5.armv4i.CAB,sqlce30.wce5.armv4i.CAB,这三个CAB安装包是SQL CE数据库必须的。如果不是有SQL CE 数据库,则这些文件不需要安装。
  System_SR_CHS.CAB,这是调试用到的一个安装包,不是必须的。

用.NET制作的应用程序部署到PDA上之前,必须安装.NET Compact Framework v2.0 或者.NET Compact Framework v3.5。由实际设备项目程序开发的版本来定,也就是上面的安装包,此外还要装SYMBOL的一个安装包(symbol.all.arm.cab),这些都是运行应用程序必须的环境。如果没有用到SQL CE,则其他几个安装包不是必须的。

由于CAB包在安装后,如果没有设置为只读,系统会自动删除,所以就想写一个自动调用的程序,安装后就会删除这些包了,那么下次就不会再安装了,如果机子冷启动了,就再次拷贝这些CAB包,为的是节省系统空间(劳神呀)。

在startup目录下增加installcab.run。内容类似下面内容Wceload /NOASKDEST /Application/CAB/NETCFv2.wce5.armv4i.cab,但当再次启动时会提示找不到cab文件,不理想。

继续查资料,发现可以在注册表中增加启动安装项。在application下增加netct.reg,内容如下:

; For Windows CE .NET devices

[HKEY_CURRENT_USER/Software/Symbol/Startup/Programs/Prog14]

"Name"="/windows/wceload.exe"

"Command"="/noaskdest /Application/cab/NETCFv2.wce5.armv4i.cab"

"Continue"=dword:0

"ColdBootOnly"=dword:1

这两种方法只有在冷启动时才执行,因而不能满足要求。

后来发现可以用bat文件,放在StartUP目录下,内容类似Wceload /NOASKDEST /Application/CAB/NETCFv2.wce5.armv4i.cab,这样每次启动机子都会执行,也就实现自动安装功能了。

五、其它知识

.cpy文件拷贝快捷方式命令如下例:

/application/PDlnk.lnk    >    /%WSM%/PDlnk.lnk
/application/PDlnk.lnk    >    /%WDT%/PDlnk.lnk
注:Windows System

Windows DeskTop

.cpy文件是冷启时用来复制文件到指定目录的命令文件。CE系统快捷方式为.lnk文件,命令行中必须使用全名(包含后缀),否则失败。

.lnk文件直接通过ActiveSync由设备拷贝出来即可。

六、安装程序

程序一般都很小,还要设置快捷方式,又不想做成CAB包(主要是VS2003制作CAB太不方便了),所以就采用了一种另类的方法。把程序拷到PDA中,设置好快捷方式,然后把部署需要的CAB包,及程序和快捷方式对应的目录结构拷下来。当PDA冷启动,数据丢失后,直接把这些文件拷到机了上,重启一下,就会自动安装了。

你可能感兴趣的:(Arm,Windows,Mobile)