Sí, es ciertamente posible.
Puede desarrollar un OPOS SO (Objeto de servicio) que implementa la interfaz COM que espera OPOS en C#. Esto puede implementar la API de la manera que desee.
Sugiero que descargue Objetos de control común OPOS de Curtiss Monroe desde http://monroecs.com/oposccos.htm.
Esto le proporcionará las bibliotecas de tipos que necesita implementar para sus objetos de servicio, y probablemente tenga algunos enlaces a la documentación de OPOS. NB Creo que OPOS usa el enlace tardío, por lo que deberá implementar una interfaz dual.
Una advertencia: IMHO OPOS es técnicamente una API horrible, diseñada por un comité de vendedores periféricos para exponer las capacidades de sus periféricos en lugar de proporcionar una abstracción útil para los desarrolladores de aplicaciones POS.
Un ejemplo particularmente llamativo de esto es el llamado dispositivo ToneIndicator, que expone las capacidades de un generador de tonos en un teclado de Fujitsu a sonar una secuencia repetida de dos tonos de diferente tono y el volumen.
ACTUALIZACIÓN
he implementado Servicio OPOS objetos antes, pero ha sido un largo tiempo. Aquí hay más información para comenzar con un POSKeyboard SO.
El Objeto de control (CO) cargará su Objeto de servicio (SO) utilizando el enlace de último momento. Entonces, de hecho, no hay un COM IID o biblioteca de tipos que implemente. En su lugar, debe implementar todos los métodos y eventos necesarios definidos en la versión adecuada de las especificaciones OPOS (por ejemplo, uno de los documentos en esta página: http://monroecs.com/oposreleases.htm). La siguiente información se basa en la 1.6 Guía del Programador de Control (CPG) vinculada en esta página.
El Capítulo 2 de la GPC describe lo que necesita implementar. Tenga en cuenta que OPOS utiliza un método extraño para obtener/establecer propiedades. Mientras que el Objeto de Control (CO) expone propiedades con nombres razonables (por ejemplo, DeviceEnabled, DeviceName, DeviceDescription), todos invocan los mismos métodos GetPropertyString (para propiedades de cadena) o GetPropertyNumber (para propiedades de entero), pasando un "índice de propiedad" entero como un argumento que define qué propiedad se va a recuperar. Los "índices de propiedad" están definidos en los archivos de encabezado suministrados con el estándar OPOS.
Con un vistazo rápido a la fuente de CCO PosKeyboard, los nombres de método que necesita implementar se enumeran en s_SOMethodNames en el archivo de origen POSKeyboardImpl.cpp.
Las entradas de registro que debe configurar están definidas en el apéndice de la Guía del programador de aplicaciones OPOS (APG) "Uso del Registro OPOS".En su caso, deberá crear una clave de registro HKLM \ OleForRetail \ ServiceOPOS \ POSKeyboard \ DefaultPOSKeyboard (donde DefaultPOSKeyboard es el nombre del dispositivo donde está pasando el método Open). Esta clave de registro debe tener un valor predeterminado que sea el ProgId de su clase SO. También puede almacenar otros valores allí (por ejemplo, información de configuración utilizada por su SO).
Buena suerte con esto: será un proceso doloroso con un montón de WTF.
¿alguna vez hizo que esto funcionara? Acabo de hacer lo mismo, mi interfaz C# puede ser instanciada por algunos Objetos de Control Común pero no por otros. Gracias. –