OPOS 是否仅适用于 x86 .NET 应用程序?

问题描述

我试图使用以下代码与 OPOS 接口连接 DataLogic-QuickScan-QD2131 手持式扫描仪:

class Program 
{
    static OposScanner_CCO.OPOSScanner scanner;

    static void Main(string[] args)
    {
        scanner = new OposScanner_CCO.OPOSScanner();
        scanner.Open("USBHHScanner");
        scanner.ClaimDevice(1000);

        if (scanner.Claimed)
        {
            Console.WriteLine("Claimed succesfully");
            scanner.DeviceEnabled = true;
            scanner.DataEventEnabled = true;
            scanner.DecodeData = true;
            scanner.FreezeEvents = false;
            scanner.DataEvent += Scanner_DataEvent;
        }
        Console.ReadKey();
    }

    private static void Scanner_DataEvent(int Status)
    {
        Console.WriteLine("Scanned {0}",Status);
    }
}

当我编译这个针对“任何 cpu”的程序时,这不起作用,在 Main 的第一行抛出异常:

System.Runtime.InteropServices.COMException: '检索具有 CLSID {CCB90182-B81E-11D2-AB74-0040054C3719} 的组件的 COM 类工厂由于以下错误而失败:80040154 类未注册 (0x800REGDBREGTE15)。

但是当编译到 x86 时它有点工作。

提前致谢!

解决方法

过去,大多数 OPOS 仅在 32 位模式下工作。

当时OPOS诞生时没有64位模式,Common CO只为32位创建,很多OPOS服务对象还是用VC++等创建,影响很大。

似乎有些供应商基于Common CO源代码创建了64位CO,同时创建并组合了64位SO以支持64位模式,但这只是专有提供。大概。


先生负责 Common CO 开发、更新和维护的 Curtiss Monroe 在 v1.14.1 之后停止更新 UnifiedPOS(OPOS)。
Monroe Consulting Services
直到该版本的 Common CO 仅在 32 位模式下提供。

因此,我正在根据 UnifiedPOS(OPOS) v1.15 的 Common CO 源更新 32 位/64 位环境的 Common CO。
kunif/OPOS-CCO
目前已获得日本OPOS-J技术委员会的认可。


注册在注册表中的各种数据在COM环境中很重要,但是在32位环境和64位环境中是分开的。
如果你在程序中不特别注意,你将无法在32bit/64bit中相互配合。

因此,为了在 64 位环境中使用 OPOS,设备供应商需要为 64 位环境创建和提供服务对象。

即使在那种情况下,32bit/64bit的每个组件也不能混合在一个程序中。
在一个程序中混合 32 位/64 位将需要所有应用程序/CO/SO 来处理它。
这是不现实的。


因此,到目前为止,仅提供了在 32 位模式下运行的 OPOS。

在每个设备的供应商接受我(或其他人)的 64 位 Common CO 并提供 64 位模式的服务对象之前,OPOS 不会改变其仅在 32 位模式下工作的情况。

>