2009-07-02 17 views
8

Per alcuni casi di interoperabilità con un'applicazione POS legacy, mi chiedevo se fosse possibile implementare un falso dispositivo OPOS in C#.Implementare il dispositivo OPOS in C#

Fondamentalmente implementerei una tastiera fasulla che ha richiesto le richieste Web e trasmesso le pressioni dei tasti all'applicazione legacy.

Qualcuno sa se questo è possibile o dove ottenere la documentazione? Ho capito che OPOS ha appena chiamato oggetti COM che sono configurati dalle chiavi di registro. Tutto ciò dovrebbe essere implementabile in C#.

+0

hai mai ottenuto questo lavoro. Ho appena fatto la stessa interfaccia in C#, che può essere istanziata da alcuni oggetti di controllo comuni ma non da altri. Grazie. –

risposta

11

Sì, è certamente possibile.

È possibile sviluppare un OPOS SO (oggetto servizio) che implementa l'interfaccia COM prevista da OPOS in C#. Questo può quindi implementare l'API nel modo desiderato.

vi consiglio di scaricare OPOS di controllo comune di Curtiss Monroe Oggetti da http://monroecs.com/oposccos.htm.

Questo vi darà le librerie dei tipi che è necessario implementare per l'oggetto di servizio (s), e ha probabilmente alcuni link alla documentazione OPOS. NB Penso che OPOS usi late-binding quindi sarà necessario implementare una doppia interfaccia.

Un avvertimento: IMHO OPOS è tecnicamente un'API orribile, progettata da un fornitore di periferiche per esporre le funzionalità delle proprie periferiche piuttosto che fornire un'utile astrazione per gli sviluppatori di applicazioni POS.

Un esempio particolarmente sorprendente di questo è il cosiddetto dispositivo ToneIndicator, che espone le capacità di un generatore di suoni in una tastiera Fujitsu per suonare una sequenza ripetuta di due toni di tono e volume diversi.

UPDATE

ho implementato OPOS Servizio Oggetti prima, ma è stato un lungo periodo di tempo. Ecco alcune informazioni in più per iniziare su un POSKeyboard SO.

  • L'oggetto di controllo (CO) carica il Service Object (SO) utilizzando l'associazione tardiva. Quindi in effetti non esiste alcun ID IID o libreria di tipi implementata. Invece è necessario implementare tutti i metodi e gli eventi richiesti definiti nella versione appropriata delle specifiche OPOS (ad esempio uno dei documenti in questa pagina: http://monroecs.com/oposreleases.htm). Le informazioni di seguito si basano sulla 1.6 Guida ai programmi di controllo (CPG) collegata in questa pagina.

  • Il capitolo 2 della CPG descrive ciò che è necessario implementare. Si noti che OPOS utilizza un metodo strano per ottenere/impostare le proprietà. Mentre Control Object (CO) espone le proprietà con nomi sensibili (ad es. DeviceEnabled, DeviceName, DeviceDescription), questi chiamano tutti gli stessi metodi GetPropertyString (per le proprietà stringa) o GetPropertyNumber (per proprietà integer), passando un intero "indice proprietà" come un argomento che definisce quale proprietà deve essere recuperata. Gli "indici di proprietà" sono tutti definiti nei file di intestazione forniti con lo standard OPOS.

  • Da una rapida occhiata all'origine CCO PosKeyboard, i nomi dei metodi che è necessario implementare sono elencati in s_SOMethodNames nel file di origine POSKeyboardImpl.cpp.

  • Le voci di registro che è necessario impostare sono definite nell'appendice APOS ("OPOS Registry Usage") dell'APOS Application Programmer's Guide.Nel tuo caso dovrai creare una chiave di registro HKLM \ OleForRetail \ ServiceOPOS \ POSKeyboard \ DefaultPOSKeyboard (dove DefaultPOSKeyboard è il nome del dispositivo che stai passando al metodo Open). Questa chiave di registro deve avere un valore predefinito che è il ProgId della tua classe SO. Puoi anche memorizzare altri valori lì (ad esempio le informazioni di configurazione utilizzate dal tuo SO).

Buona fortuna con questo - sarà un processo doloroso con un sacco di WTF.

+1

Ottimo! Ho pensato che la mia domanda non avrebbe avuto risposta, dal momento che OPOS è piuttosto vecchio ... Sono stato a guardare questo sito di monroecs per un po ', ha un sacco di informazioni (ed è un po' confuso), ma non quello che ho bisogno in particolare . Non ho esattamente capito: a) Quale interfaccia COM per implementare dal quale dll (presumo POSKeyboard di qualche tipo) b) Come registrarsi mia dll per OPOS da usare (lo so HKLM \ OleForRetail \ ServiceObjects è il posto, solo bisogno di un documento su di esso) d) Finalmente voglio caricare l'app POS (utilizza solo il LDN di DefaultPOSKeyboard), e vedere il mio codice C# pop-up di alcuni MessageBox – jonathanpeppers

+0

PS - sarebbe bello implementare la funzione di test implementa molti dispositivi dall'app di configurazione OPOS. – jonathanpeppers

+0

"l'app di configurazione OPOS" - quale app di configurazione? – Joe

Problemi correlati