因此,經過一系列研究後,我發現使用WideCharToMultiByte非常適合通過OPOS將控制對象的數據發送到我的自定義SO。我們遇到了一個錯誤。在DirectIO部分,C#控制對象的映射是DirectIO(int命令,ref int data,ref字符串對象);OPOS BSTR *沒有正確轉換
並且我們只需要通過DirectIO發送簡單命令就可以了。例如,要打開LED,我們將數據設置爲以毫秒爲單位的長度,並將對象設置爲顏色。當我們需要將數據寫入標籤或卡片時,必須將文本從特定的XML樣式字符串解析爲字節數組......現在需要的是我們需要有一個字節數組,使用ASCII編碼將該數組放入字符串形式,並寫入它..
問題出現了,當我在我的服務對象中轉換此字符串它不會正確地轉換它。它似乎停止null,即使SysStringLen知道長度是4字節。實施例中的控制對象執行此
int page = 16;
byte[] data = new byte[] { 0x19, 0x00, 0x30, 0x00 };
string pData = System.Text.ASCIIEncoding.ASCII.GetString(data);
msr.DirectIO(902, ref page, ref pData);
的SO認爲這
int len = (int)SysStringLen(*pString);
long dataData = *pData;
char* dataObject = new char[1+len];
WideCharToMultiByte(CP_ACP, 0, *pString, -1, dataObject, len, NULL, NULL);
ByteUtil::LogArray("dataObject", (BYTE*)dataObject, len);
產生的
dataObject(4)-19:00:00:00
基本上立即輸出作爲TEH第一個空字符達到的其餘部分數據丟失。現在,如果我將字符串中的數字轉換爲字符串,那麼可以正常工作,因爲我有一個ByteUtil函數用於該場合...但對於我來說這似乎不正確...爲什麼不能我只是把它作爲BYTE數組?
我想我也許只是回答我自己的問題在不同類型的卡,我們寫得太我們發送一個表示字節數組,並將其轉換爲字符串...所以我們應該堅持這種方法......和這符合OPOS標準無論如何...但如果任何人有一個建議,請隨時告訴我:) – 2013-02-10 20:18:44