0 Replies Latest reply on Feb 14, 2015 12:08 PM by Kamil Wisniewski

    Why GetScanners method of ICoreScanner finished with status 103

    Kamil Wisniewski



      I have  Motorola_CoreScanner_Driver_(64bit)_v2.05.0004 and Motorola_Scanner_SDK_(64bit)_v2.04.0012 installed on my computer.


      As you may know  in  Program Files\Motorola Scanner\Scanner SDK\Scanner SDK\Sample Applications\bin there are two SampleSDK applications, one written in C++ second in C# - issue applies to both of them.


      consider a scenario:


      - scanner is pluged in to USB port (mine is LS 2208)

      - start ScannerSDK application ( no matter which one C++ or C#)

      - press 'Discover Scanners' button


      in the Log I get folowing output


      1. OPEN SCANNERS - Command Success.

      2. REGISTER_FOR_ALL_EVENTS - Command Success.

      3. GET_SCANNERS - Command Failed. Error:103


      when then (having application still running) I plug out the scanner and plug it in again it is detected and added to 'Select Scanner' combo box.


      2 new entries come up in the Log:


      4. Scanner Detached Event Fired

      5. Scanner Attached Event Fired


      Any consecutive click on 'Discover Scanners' button ends with:


      6. OPEN SCANNERS - Command Failed. Error:200  (this one is understandable, as it is already open)

      7. REGISTER_FOR_ALL_EVENTS - Command Success.

      8. GET_SCANNERS - Command Failed. Error:103 (I always get error 103)


      I installed 32bit version on my old 32bit laptop - same issue


      After compiling SampleSDK app and quick round of debugging I found the issue lays in bolded line.


      long CScannerCommands::cmdDiscover(BSTR * outXml,long *Status)


          HRESULT hr = S_FALSE;

          SHORT NumScan=0;

          SAFEARRAY* pSA = NULL;

          SAFEARRAYBOUND bound[1];

          bound[0].lLbound = 0;

          bound[0].cElements = 255;

          pSA = SafeArrayCreate(VT_I2, 1, bound);


          hr = ScannerInterface->GetScanners(&NumScan,pSA,outXml,Status);


          return hr;



      GetScanners always returns 103 in Status.


      According to CoreScanner developers guide 103 is described as Invalid buffer pointer ( ERROR_INVALID_BUFFER_POINTER).

      Floowing this hint I changed VT_I2 in line pSA = SafeArrayCreate(VT_I2, 1, bound);  to VT_I4, VT_I8, VT_INT with same result - always getting 103


      I came to the conclusion that there might be a bug in ICoreScanner COM component.


      Is there a solution or workaround to this issue?

      I need to have GetScanners function working, forcing user of my app to plug out and in the scanner to make it detected is not an option.