2013-03-01 140 views
3

我想为Motorolo MC 9190 G移动设备开发简单的应用程序,它具有内置的条码扫描器,我想扫描条码并将它们显示在信息框中。我没有手机,所以我必须在模拟器中测试它。当我在模拟器中部署代码时,它会给出null异常错误。我的代码是 我添加sample.barcode DLLWindows Mobile应用程序条码扫描与模拟器

Private barcodeReader As Symbol.Barcode.Reader // error occurs here itself 
barcodeReader = New Symbol.Barcode.Reader() 
barcodeReader.Actions.Enable() 
Dim nextReaderData As Symbol.Barcode.ReaderData = barcodeReader.GetNextReaderData() 
MessageBox.Show(nextReaderData.Text) 

我毫米初学者到这个..请帮助..

+0

您的模拟器是否有条形码读取器?你如何模仿阅读条形码? – jp2code 2013-03-02 21:43:56

回答

3

您需要创建沿着这些线路接口和模拟的东西:

interface IBarcodeReader 
{ 
    string ReadBarcode(); 
} 

public class SymbolReader : IBarcodeReader 
{ 
    private Reader m_reader; 

    public SymbolReader() 
    { 
     m_reader = new SymbolReader.Barcode.Reader; 
     m_reader.Actions.Enable(); 
    } 

    public string ReadBarcode() 
    { 
     return m_reader.GetNextReaderData().Text; 
    } 
} 

public class MockReader : IBarcodeReader 
{ 
    public string ReadBarcode() 
    { 
     return "MOCK ABCDE"; 
    } 
} 

然后在运行时,使用一些逻辑来确定你的平台,并创建相应的实例:

public class Foo 
{ 
    IBarcodeReader Reader { get; set; } 

    public Foo() 
    { 
     if (ThisIsASymbolDevice) 
     { 
      Reader = new SymbolReader(); 
     } 
     else 
     { 
      Reader = new MockReader(); 
     } 

     var barcode = Reader.ReadBarcode(); 
    } 
} 
+0

很好的解决方法。由于模拟器不知道也不支持条形码读取器,因此不能在模拟器上使用符号DLL和运行时。通过使用兼容层,您可以模拟您认为真实硬件将提供的内容。 – josef 2013-03-01 17:59:12

+0

而我们也可以在OpenNETCF.IoC模块中实现SymbolReader,MyOwnScanner作为服务;-) – hellboy 2013-03-25 09:18:22

+1

@hellboy:当然! DI容器总是一件好事。 – ctacke 2013-03-25 13:51:52