2013-07-03 1 views
1

다른 게시물이 매우 유사하지만 다른 스레드에서 제공되는 솔루션을 사용하여이 기능을 사용하기 위해 끊임없이 노력했지만 많은 행운이 없었습니다. .바코드 가져 오기 스캔 이벤트 Motorola 바코드 스캐너

필자는 Motorola DS3578 무선 스캐너를 가지고 있습니다. 바코드를 스캔 할 때 C# 응용 프로그램에서 이벤트를 처리하려고합니다. Motorola 개발자 설명서를 참조하고 있습니다.

여기 내 코드입니다 : 위와 같이

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을 얻는 방법에 대한 제안이있는 사람이 있습니까?

+0

'Console.Read() '이 (가) 차단되지 않았습니까? – jac

+0

그러나 Console.Read()를 제거 할 때마다 창이 열리고 바로 닫힙니다. Console.Read()없이 화면에 콘솔을 유지할 수 있습니까? –

+0

콘솔 프로그램이 이벤트에 응답하지 않습니다. 윈도우 프로그램으로 만들어야합니다. 나는 –

답변

1

OnBarcodeEvent에 대한 참조가 없습니다. 그것은 조상을 무시하는 것이 아닙니다. 따라서 세계에서 어떻게 불릴까요?

+1

다음과 같이 추가해야합니다. cCoreScannerClass.BarcodeEvent + = 새 _ICoreScannerEvents_BarcodeEventEventHandler (OnBarcodeEvent); –