UWP PointOfService API - 无法使用 GetSupportSymbologiesAsync 或 GetSymbologyAttributesAsync

UWP PointOfService API - Can't use GetSupportSymbologiesAsync or GetSymbologyAttributesAsync

我正在使用 UWP Barcode Sample.

我正在尝试将 UWP PointOfService API 与运行 Windows 10 Mobile Enterprise 的 Panasonic FZ-F1 一起使用。我无法获得支持的符号系统,因为 scanner.GetSupportedSymbologiesAsync() 总是 returns 空值 System.__ComObject。使用本机视图,调试到设备时类型为 IUnknown。

0x00007ff8ca8ba278 {Windows.Devices.PointOfService.dll!const Windows::Internal::AsyncOperation<struct Windows::Foundation::IAsyncOperation<struct Windows::Foundation::Collections::IVectorView<unsigned int> *>, struct Windows::Foundation::IAsyncOperationCompletedHandler<struct Windows::Foundation::Collections::IVectorView<unsigned int> *>, class Windows::Internal::CMarshaledInterfaceResult<struct Windows::Foundation::Collections::IVectorView<unsigned int> >, class Windows::Internal::ComTaskPoolHandler,struct Windows::Internal::INilDelegate,struct Microsoft::WRL::AsyncOptions<-1,0,&struct _GUID const GUID_CAUSALITY_WINDOWS_PLATFORM_ID,2> >::`vftable'{for `Microsoft::WRL::Details::ImplementsHelper<struct Microsoft::WRL::RuntimeClassFlags<3>,1,struct Windows::Foundation::IAsyncOperation<struct Windows::Foundation::Collections::IVectorView<unsigned int> *>, struct Windows::Internal::IAsyncOperationLocal,struct Microsoft::WRL::CloakedIid<struct Windows::Internal::IAsyncDeferral>,struct Microsoft::WRL::CloakedIid<struct Windows::Internal::IComPoolTask>,struct Microsoft::WRL::CloakedIid<struct Windows::Internal::IAsyncFireCompletion> >'}} {...}

我还在 Windows 10 16299 上用 Honeywell Xenon 1900g 测试了这个,但它在那里也不起作用。这是那里的错误。

$exception  {System.NullReferenceException: Object reference not set to an instance of an object.
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at SDKTemplate.Scenario3_ActiveSymbologies.<ScenarioStartScanButton_Click>d__8.MoveNext()} System.NullReferenceException

StackTrace  "   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at SDKTemplate.Scenario3_ActiveSymbologies.<ScenarioStartScanButton_Click>d__8.MoveNext()"  string

我需要能够支持长度为10的TfInt(I2of5),由于无法设置length属性而无法扫描。我曾尝试使用 claimedScanner.GetSymbologyAttributesAsync(BarcodeSymbologies.TfInt) 定义条形码,但失败并出现以下异常。

{System.Exception: The request is not supported. (Exception from HRESULT: 0x80070032)
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at SDKTemplate.Scenario4_SymbologyAttributes.<SymbologySelection_Changed>d__13.MoveNext()}  System.Exception

FZ-F1 支持 TfInt (I2of5)。使用其预加载的条码 Reader 演示应用程序(我假设它是使用 Windows 8.1 手持设备 API 创建的)我可以在那里分配长度并且它按预期工作。

目前,经过一些测试我发现 API 默认为 TfInt (I2of5) Length1、Length2 或 AnyLength(我不确定当前设置的是什么)使用长度 14 ,所以有一个可能的解决方法,就是我们可以将所有条形码更改为使用 14 的长度。如果长度小于 14,则无法扫描。

任何人都知道这个 API 是否真的适用于完成我尝试过的事情。他们创建了样例,但根据我的经验,事实并非如此。 (将其添加到文档中会非常有帮助)

与微软和松下开票后,结果如下

来自松下:

GetSupportedSymbologiesAsync : 目前,此 API 无法 return 正确支持符号。 此问题将在 RS3 上修复。但是,我认为这个问题对 UWP 用户应用程序影响不大,因为 FZ-F1 支持的 Symbologies 没有变化。

GetSymbologyAttributesAsync : 这个 API 不受支持。

我遇到的问题与无法使用设备上的松下条形码 Reader 应用程序配置 Interleaved 2 of 5 符号系统有关。我错误地认为,由于我无法使用该应用程序,所以我必须在代码中执行此操作。事实证明,在 Barcode Reader 中应用的设置不起作用的原因是设备需要具有以下命令 运行 才能在 Barcode Reader 中进行设置要应用 - 否则应用符号系统默认值。

领取扫描仪后...

await claimedScanner.SetActiveProfileAsync("OEMProfile");

这是 Panasonic 支持文档,他们在其中发布了此要求作为持续支持问题的结果,我于 2017 年 10 月首次联系他们。

http://pc-dl.panasonic.co.jp/dl/docs/076321?dc[]=002012&no=3&p1=221&q=FZ-F1&score=1.43731880187988&sri=12077714&trn_org=2

这是一个工作示例项目。如果您使用的符号系统需要设置长度,而您没有使用默认长度,这可能对您有所帮助。

https://1drv.ms/u/s!Am4H1xOfJ2mxgQ_pqOia9wj46oKq