2009-07-02 67 views
8

對於一些與傳統POS應用程序的互操作,我想知道是否有可能在C#中實現假OPOS設備。在C#中實現OPOS設備#

基本上我會實現一個虛假的鍵盤,採取網絡請求,並通過按鍵傳遞給遺留應用程序。

有誰知道這是可能的或從哪裏獲得文檔?我認爲OPOS只是調用了由註冊表鍵配置的COM對象。所有這些都應該可以在C#中實現。

+0

你有沒有得到這個工作。我剛剛做了同樣的事情,我的C#接口可以通過一些通用控制對象實例化,但不能通過其他實例化。謝謝。 – 2011-11-17 00:38:47

回答

11

是的,這當然是可以的。

您可以開發一個OPOS SO(服務對象),它實現OPOS在C#中預期的COM接口。然後這可以以任何你想要的方式實現API。

我建議你從http://monroecs.com/oposccos.htm下載Curtiss Monroe的OPOS通用控制對象。

這會給你需要爲你的服務對象實現的類型庫,並且可能有一些OPOS文檔的鏈接。 NB我認爲OPOS使用後期綁定,所以你將需要實現雙接口。

一個告誡:恕我直言,OPOS在技術上是一個可怕的API,由委員會外圍設備供應商設計,公開外設的功能,而不是爲POS應用程序開發人員提供有用的抽象。

一個特別引人注目的例子就是所謂的ToneIndicator設備,該設備展示了富士通鍵盤中音源的功能,以發出不同音高和音量的兩種音調的重複序列。

UPDATE

我已經實現OPOS服務對象之前,但它是一個漫長的時間。這裏有一些更多的信息讓你開始使用POSKeyboard SO。

  • 控制對象(CO)將使用後期綁定加載您的服務對象(SO)。所以實際上沒有你實現的COM IID或類型庫。相反,您需要實施適當版本的OPOS規範中定義的所有必需方法和事件(例如,本頁面上的文檔之一:http://monroecs.com/oposreleases.htm)。以下信息基於此頁面上鍊接的1.6 Control Programer's Guide(CPG)。

  • CPG的第2章介紹了您需要實施的內容。請注意,OPOS使用奇怪的方法獲取/設置屬性。儘管控制對象(CO)暴露了具有合理名稱的屬性(例如,DeviceEnabled,DeviceName,DeviceDescription),但是這些全部調用相同的方法GetPropertyString(用於字符串屬性)或GetPropertyNumber(用於整數屬性),將整數「屬性索引」定義要檢索哪個屬性的參數。 「屬性索引」全部在OPOS標準提供的頭文件中定義。

  • 快速瀏覽CCO PosKeyboard源代碼,您需要實現的方法名稱在源文件POSKeyboardImpl.cpp的s_SOMethodNames中列出。

  • 您需要設置的註冊表條目在OPOS應用程序員指南(APG)附錄「OPOS Registry Usage」中定義。在你的情況下,你將需要創建一個註冊表項HKLM \ OleForRetail \ ServiceOPOS \ POSKeyboard \ DefaultPOSKeyboard(其中DefaultPOSKeyboard是您傳遞Open方法的設備名稱)。此註冊表項需要有一個默認值,它是您的SO類的ProgId。您還可以在其中存儲其他值(例如您的SO使用的配置信息)。

祝你好運 - 這將是一個痛苦的過程與大量的WTF的。

+1

太棒了!我以爲我的問題可能沒有得到答案,因爲OPOS是相當老... 我一直在尋找這個monroecs網站一段時間,它有很多的信息(並有點混亂),但不是我特別需要。 我還沒有完全想清楚: a)哪個COM接口實現從哪個dll(我認爲POSKeyboard的某種) b)如何註冊我的dll供OPOS使用(我知道HKLM \ OleForRetail \ ServiceObjects是d)我終於想裝載POS應用程序(它只是使用DefaultPOSKeyboard的LDN),並看到我的C#代碼彈出一些MessageBoxes – jonathanpeppers 2009-07-02 20:19:29