我一直在尝试使用“Motorola EMDK for .net v.2.7”读取GS1数据矩阵代码。为此,我一直在使用Symbol(v.2.5.0.3)和Symbol.Barcode(v.2.7.0.2)程序集,并在Windows窗体应用程序中创建以下示例代码:
private global::Symbol.Barcode.Reader _reader;
private global::Symbol.Barcode.ReaderData _readerData;
public Form1()
{
InitializeComponent();
_readerData = new ReaderData(ReaderDataTypes.Text, ReaderDataLengths.DefaultText);
var device = Device.AvailableDevices.FirstOrDefault(d => d.DeviceName != Device.SIMULATE);
if (device == null)
{
throw new Exception("No Symbol scanner in the system."); //TODO //MSG
}
// Create the reader, based on selected device
_reader = new global::Symbol.Barcode.Reader(device);
_reader.Actions.Enable();
_reader.Changes.Save();
_reader.ReadNotify += new EventHandler(_reader_ReadNotify);
// Start a pending read.
try
{
_reader.Actions.Read(_readerData);
}
catch (global::Symbol.Exceptions.OperationFailureException)
{
//_logger.Error("Error, Reader is blocked", ex);,
}
}
private void _reader_ReadNotify(object sender, EventArgs e)
{
_readerData = _reader.GetNextReaderData();
_reader.Actions.Read(_readerData);
}
private void Form1_Closing(object sender, CancelEventArgs e)
{
_reader.Dispose();
}
我已经通过ReadNotify事件中的断点分析了输出,但是我得不到合理的结果。它总是只是普通的代码字符串。
我需要某种指示(例如通过符号系统标识符),它是gs1数据矩阵代码,或者更好的结果是有用的格式。
答案 0 :(得分:0)
EMDK示例显示了如何使用条形码库。
switch (_readerData .Result)
{
case Symbol.Results.SUCCESS:
HandleData(_readerData)
break;
}
_readerData.Text
是条形码中的文本,您必须将文本拆分为GS1矩阵代码中的功能代码以获取AI值
_readerData.Type
是条形码的类型,您可以检查矩阵条形码
您可能还需要将ReaderDataLengths.DefaultText (55)
更改为ReaderDataLengths.MaximumLabel