1

已经发表了与此非常相似的其他帖子,但是,我一直在不懈地尝试使用其他线程中提供的解决方案使其工作,但没有任何运气。

我有一个摩托罗拉 DS3578 无线扫描仪。我试图让我的 C# 应用程序在扫描条形码时处理一个事件。我一直在参考摩托罗拉开发者文档。

这是我的代码:

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,列出可用的扫描器,使用 opcode 1001 启用处理事件,并添加 OnBarcodeEvent 方法。

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

在此处输入图像描述

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

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

在此处输入图像描述

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

有人对如何开始OnBarcodeEvent工作有任何建议吗?

4

1 回答 1

1

我在任何地方都看不到对 OnBarcodeEvent 的引用。它不是凌驾于祖先之上。那么,它到底怎么称呼呢?

于 2013-07-03T19:33:31.710 回答