VS2008 开发的Wince程序 部署运行时出现UnmarshalStructInfoForm 错误

            前年用vs2008开发wince 追溯程序的时候,因为人家设备提供商给了技术支持,而且程序一路使用都比较顺利,除了无线条码打印开发遇到点困难之外。再有就是一开是用wince上的sql server存储数据,但是后来发现这是一个严重的错误,因为设备是分布在各个工厂,而且wince 这个系统冷启动之后什么都恢复了,这里说一下我开始用的设备是mc3090,所以后来考虑使用webservice来做这个数据 访问和存储的,这样可以实施分布式同步。

          可是最近,公司成品仓库也要使用移动设备出库,所以也买了一个同样的设备,当我帮助销售组在设备上开发布置的时候,我考虑都没有考虑就把程序布置上去了,可是一运行不行错了。运行到myreader.Actions.Enable的时候,出现了UnmarshalStructInfoForm错误,但是网上找好久的,都没有有解决答案,而且很多开发者因为自己解决了这个问题,很简单的就讲解一下。

          不过我也找到了根本原因那就是:我现在MC3100是MC3090的升级版,系统是wince6.0的而之前是5.0的。说要下载emdk,EMDK其实是SMDK的一个升级版,这里我就很纳闷,你说软件至少要有一个向前兼容吧,也许跟android一样2.3到4.0的时候也会来个质的飞跃,但是android是性能上的提升啊。

          好吧速度去找emdk的下载地址,果然网上有很多,去摩托罗拉的官网吧,真是病急乱投医下载了一个EMDK for .NET v2.1,悲剧了,按照网上的步骤,怎么也没有解决,有点气馁啊。

          终于在msdn上找到答案了:http://social.msdn.microsoft.com/Forums/zh-CN/windowsembeddedcezhchs/thread/fce5059a-7f59-4ae2-b58f-f1edca29df47,人家说要装emdk,我一开始以为要装到wince上,但是想想不对,java c#开发sdk都是装在我们电脑上的,而且如果装在设备上,冷启动不是要重装吗。

              下载emdk:https://docs.symbol.com/KanisaPlatform/Publishing/465/13209_f.html?userId=37

然后装电脑上,赶快运行看看吧。。

          

 1 using System;
 2 using System.Linq;
 3 using System.Collections.Generic;
 4 using System.ComponentModel;
 5 using System.Data;
 6 using System.Drawing;
 7 using System.Text;
 8 using System.Windows.Forms;
 9 
10 namespace test1
11 {
12     public partial class Form1 : Form
13     {
14         Symbol.Barcode.Reader myReader;
15         Symbol.Barcode.ReaderData myReaderData;
16         public Form1()
17         {
18             myReader = new Symbol.Barcode.Reader();
19             myReaderData = new Symbol.Barcode.ReaderData(
20                 Symbol.Barcode.ReaderDataTypes.Text,
21                 Symbol.Barcode.ReaderDataLengths.DefaultText);
22             myReader.Actions.Enable();
23             myReader.Actions.Read(myReaderData);
24             InitializeComponent();
25         }
26     }
27 }

好期待啊,应该完成了吧,可是,错误还是出现了,好气馁啊。
搜索继续找答案,找到了,我们还是要在设备上安装一个组件symbol.all.arm.cab,找到我们emdk的安装目录:

D:\Program Files\Motorola EMDK for .NET\v2.5\Windows CE\MassDeployment\CE.NET,下面有我们需要安装的组件。

把这个组件拷贝到我们wince设备上,然后在设备上安装,如果是安装emdk for .net 2.1的时候会提示与系统不兼容,安装完之后,我们还要把两个程序集拷贝到我们项目下面(这个一般在wince \windows目录下面),Symbol.ddl,Symbol.Barcode.ddl。然后再运行上面这段程序,终于成功了(现在想想这种打补丁的方式开发系统还是真讨厌,不过目前我们软件开发好多都是打补丁式的升级)。最近老忙了,幸好周末有时间,记录下来,希望对大家有帮助。

有错误的地方欢迎大家拍砖,希望交流和共享。
原文地址:https://www.cnblogs.com/MR_ke/p/2533073.html