获取条形码扫描事件摩托罗拉条形码扫描仪

时间:2013-07-03 18:55:52

标签: c# barcode

已经制作了与此非常相似的其他帖子,但是,我已经不遗余力地尝试使用其他线程中提供的解决方案,但没有任何运气。

我有一台摩托罗拉DS3578无线扫描仪。我正在尝试让我的C#应用​​程序在扫描条形码时处理事件。我一直在参考Motorola Developers文档。

这是我的代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml; 

using CoreScanner;

namespace MotarolaScannerTesting
{
class Program
{

    //declare the core scanner class 
    static CCoreScannerClass cCoreScannerClass; 

    static void Main(string[] args)
    {

        cCoreScannerClass = new CoreScanner.CCoreScannerClass(); 

        //CALL OPEN API
        short[] scannerTypes = new short[1];        //scanner types intrested in
        scannerTypes[0] = 1;                        // set all scanner types to 1
        short numberOfScannerTypes = 1;             // size of the scanner type array 
        int status;                                 // Extend API return code

        cCoreScannerClass.Open(0, scannerTypes, numberOfScannerTypes, out status);

        if (status == 0)
            Console.WriteLine("CoreScanner API OPEN");
        else
            Console.WriteLine("CoreScanner API CLOSED");

        // Lists all scanners connected to the host computer.
        // will return nothing

        short numberOfScanners;
        int[] connectedScannerIDList = new int[255];

        string outXML;

        cCoreScannerClass.GetScanners(out numberOfScanners, connectedScannerIDList, out outXML, out status);

        //below does not work because string is an xml file and is never NULL
        Console.WriteLine(outXML);
       // Console.WriteLine(outXML.ToString()); 

        int opcode = 1001;
        string inXML =  "<inArgs>" +
            "<cmdArgs>" +
            "<arg-int>1</arg-int>" +
            "<arg-int>1</arg-int>" +
            "</cmdArgs>" +
            "</inArgs>";
        cCoreScannerClass.ExecCommand(opcode, ref inXML, out outXML, out status);  

      opcode = 2011; 
        inXML = "<inArgs>" +
           "<scannerID>1</scannerID>" +
              "</inArgs>";
        cCoreScannerClass.ExecCommand(opcode, ref inXML, out outXML, out status); 


        Console.Read(); 

    }

    void OnBarcodeEvent(short eventType, ref string pscanData)
    {
        Console.WriteLine("Scannner Event! Scan Data: " + pscanData);
    }
}
}

如上所示,我打开扫描仪API,列出可用的扫描仪,使用操作码1001启用处理事件,并添加OnBarcodeEvent方法。

我得到以下输出,光标准备好在底线输入:

enter image description here

当我扫描条形码时,光标所在的位置没有输入任何内容。 OnBarcodeEvent()中的行应该执行,将消息写入控制台。

我知道扫描仪能够收听事件,因为当我将它与摩托罗拉提供的示例应用程序一起使用时,我得到了这个:

enter image description here

作为最后一点,我已将扫描仪从“HIDKB”更改为“IBM HANDHELD”,因此可以处理事件。

有人有任何建议如何让OnBarcodeEvent正常工作吗?

1 个答案:

答案 0 :(得分:1)

我在任何地方都看不到对OnBarcodeEvent的引用。它不会压倒一个祖先。那么世界将如何被称为?