Why GetScanners method of ICoreScanner finished with status 103

K Kamil Wisniewski 3 years 7 months ago
20 0 0

Hello,
 
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);
    ////OutputDebugStringW(*outXml);
    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.
 
Regards

CONTACT
Can’t find what you’re looking for?