OPOS-Gerät in C # implementieren

8

Für einige Interop mit einer alten POS-Anwendung habe ich mich gefragt, ob es möglich war, ein gefälschtes OPOS-Gerät in C # zu implementieren.

Grundsätzlich würde ich eine gefälschte Tastatur implementieren, die Webanfragen entgegennimmt und Tastenbetätigungen an die Legacy-Anwendung weitergibt.

Weiß jemand, ob das möglich ist oder wo man Dokumentation bekommt? Ich dachte, dass OPOS gerade COM-Objekte aufgerufen hat, die durch Registrierungsschlüssel konfiguriert sind. All dies sollte in C # implementiert werden können.

    
jonathanpeppers 02.07.2009, 18:52
quelle

1 Antwort

11

Ja, das ist sicher möglich.

Sie können ein OPOS SO (Service Object) entwickeln, das die von OPOS in C # erwartete COM-Schnittstelle implementiert. Dies kann dann die API in beliebiger Weise implementieren.

Ich schlage vor, dass Sie die OPOS Common Control Objects von Curtiss Monroe von Ссылка herunterladen.

Dies gibt Ihnen die Typbibliotheken, die Sie für Ihre Service-Objekte implementieren müssen, und hat wahrscheinlich einige Links zur OPOS-Dokumentation. NB Ich denke, OPOS verwendet Late-Binding, so dass Sie eine Dual-Schnittstelle implementieren müssen.

Vorbehalt: IMHO OPOS ist technisch gesehen eine schreckliche API, die von einem Ausschuss von Peripherieanbietern entwickelt wurde, um die Fähigkeiten ihrer Peripheriegeräte offenzulegen, anstatt eine nützliche Abstraktion für POS-Anwendungsentwickler bereitzustellen.

Ein besonders eindrucksvolles Beispiel ist das sogenannte ToneIndicator-Gerät, das die Möglichkeiten eines Tongenerators in einer Fujitsu-Tastatur offenlegt, um eine wiederholte Sequenz von zwei Tönen unterschiedlicher Tonhöhe und Lautstärke zu erzeugen.

AKTUALISIEREN

Ich habe OPOS Service Objects schon einmal implementiert, aber es ist lange her. Hier sind einige weitere Informationen, die Sie zum Einstieg in ein POSKeyboard SO führen sollen.

  • Das Control-Objekt (CO) lädt Ihr Service-Objekt (SO) mit späte Bindung. In der Tat gibt es keine COM IID oder Typbibliothek, die Sie implementieren. Stattdessen müssen Sie alle erforderlichen Methoden und Ereignisse implementieren, die in der entsprechenden Version der OPOS-Spezifikationen definiert sind (z. B. eines der Dokumente auf dieser Seite: Ссылка ). Die folgenden Informationen basieren auf dem 1.6 Control Programmer's Guide (CPG), der auf dieser Seite verlinkt ist.

  • In Kapitel 2 der CPG wird beschrieben, was Sie implementieren müssen. Beachten Sie, dass OPOS eine seltsame Methode zum Abrufen / Festlegen von Eigenschaften verwendet. Während das Control Object (CO) Eigenschaften mit sinnvollen Namen (zB DeviceEnabled, DeviceName, DeviceDescription) freigibt, rufen diese alle die gleichen Methoden GetPropertyString (für String-Eigenschaften) oder GetPropertyNumber (für Integer-Eigenschaften) auf und übergeben eine Ganzzahl "property index" als ein Argument, das definiert, welche Eigenschaft abgerufen werden soll. Die "Eigenschaftsindizes" sind alle in Header-Dateien definiert, die mit dem OPOS-Standard geliefert werden.

  • Von einem kurzen Blick auf die CCO-PosKeyboard-Quelle werden die Methodennamen, die Sie implementieren müssen, in s_SOMethodNames in der Quelldatei POSKeyboardImpl.cpp aufgelistet.

  • Die Registrierungseinträge, die Sie einrichten müssen, sind im OPOS Application Programmer's Guide (APG) Anhang "OPOS Registry Usage" definiert. In diesem Fall müssen Sie einen Registrierungsschlüssel HKLM \ OleForRetail \ ServiceOPOS \ POSKeyboard \ DefaultPOSKeyboard erstellen (wobei DefaultPOSKeyboard der Gerätename ist, den Sie mit der Open-Methode übergeben). Dieser Registrierungsschlüssel muss einen Standardwert haben, der die ProgId Ihrer SO-Klasse ist. Sie können dort auch andere Werte speichern (z. B. Konfigurationsinformationen, die von Ihrer SO verwendet werden).

Viel Glück dabei - es wird ein schmerzhafter Prozess mit vielen WTF's sein.

    
Joe 02.07.2009, 20:05
quelle

Tags und Links