微光互聯 TX800-U 掃碼器無法輸出中文到光標的問題( 六 )


微光互聯 TX800-U 掃碼器無法輸出中文到光標的問題

文章插圖
看崩潰點沒什么頭緒,表現還不如 console 呢 , 這下把我整不會了,最終這個方案宣告失敗 。不過留著還是有意義的,萬一有人基于它實現了光標輸出呢…
結語本文嘗試解決掃碼器在遇到中文時不輸出字符的問題,總體上解決了這個問題,優雅的解決方案因技術問題沒有實現,不優雅的解決方案針對檢測場的需求來說也夠用了 。
最早想的技術方案其實是不想動 demo 程序的,當時想通過在外面包一層 shell 腳本來解決 , 熟悉的讀者知道我喜歡用這種方式解決一些問題,當時主要有兩個原因導致想這樣干:
  • 家里的 windows 筆記本沒裝 VS,安裝 VS2015 一來比較慢,二來拖累機器運行速度,不想裝
  • demo 程序已經比較完整,只缺一個編碼轉換的工作,而用腳本調用 iconv 一行就能搞定,何必費力寫 c++ 呢?
后面親自試過后,發現有兩個問題 shell 腳本無法繞開:
  • demo 的輸出在經過 msys2 處理后 , 無法正確斷行,導致無法從輸出信息中提取掃碼器讀取的數據,對于這個問題
    • 開始懷疑是管道重定向后 stdout 不再是行緩沖的 , 而在 shell 層面無法改變一個程序的 stdout 緩沖類型
    • 后來修改 demo 源碼,增加 setvbuf 調用 (參考《[apue] 標準 I/O 庫那些事兒》中緩沖一節),重新編譯但不起作用
    • 最終定性是 msys2 與 demo 之間的兼容性問題,不好搞,放棄
  • 想要將數據復制到系統剪貼板 , 可以直接在 msys2 中使用 windows 的 clip 命令接收要放置的數據 (echo "${data}" | clip),但是如果想將數據輸出到光標 , 對不起辦不到 。這個必需用 c++ 進行系統開發 (后來也沒走通,不過這是后話)
最終是將公司的 windows 本帶回來專門搞這個事情,那個開發環境配置的比較全面,不用浪費時間再配了 。說到這里,突然想到為何沒有人搞在線的 VS 開發環境?linux 上的 gcc 這種環境一搜一大把,提交個文件或直接在 web 界面里寫 c++ 代碼,就能編譯出可執行文件,而免費的 VS 線上開發環境卻幾乎沒有!如果有人搞個 VS 的在線編譯環境,肯定能火,哪怕編譯一次收個十元二十元的 , 我估計也有人用 。
上面說了一些解決過程中的探索,下面談談這個掃碼器的問題 , 如果它能將編碼轉換功能集成在硬件里,通過配置來決定如何進行編碼轉換,那么這個場景就不需要二次開發 sdk 了!只要運行下 VguangConfig 并做一些勾選工作就可以了 , 如果再將常用的幾種編碼轉換做成二維碼配置放在文檔中,直接掃對應的碼就搞定了!后續給廠家反饋時 , 廠家表示可以考慮,其實就是增加一個 iconv.dll 的事兒,不難!
最后說一下系統升級導致掃碼器不能用的問題,這就是典型的沒做系統集成測試案例?。⌒孿低趁揮屑嬡堇舷低車囊恍┮怨嬖?,導致下游出問題,其實完全可以讓升級系統的軟件廠商改進一下它這個二維碼的生成方式,是用 utf8 還是 gb2312,搞成可配置的,操作人員通過配置來保持以前的編碼方式不變,這個問題也能得到解決 。
下載掃碼器 sdk 官網就可以下載,兩個應用的源碼及可執行文件鏈接如下:
Demohidprotocol console 版
Demohidprotocol win32 版
console 版可以直接用,win32 版還是個半成品,感興趣的讀者可以嘗試探索一下 。
console 版的可執行文件為 debug 版本,release 版本不知為何編譯報錯:
1>------ Build started: Project: Demohidprotocal, Configuration: Release Win32 ------1>main.obj : error LNK2001: unresolved external symbol __imp__SetClipboardData@81>main.obj : error LNK2001: unresolved external symbol __imp__EmptyClipboard@01>main.obj : error LNK2001: unresolved external symbol __imp__CloseClipboard@01>main.obj : error LNK2001: unresolved external symbol __imp__OpenClipboard@41>D:\BaiduNetdiskDownload\USB接口C&CPP語言SDK20220411\Demohidprotocal\Release\Demohidprotocal.exe : fatal error LNK1120: 4 unresolved externals========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========看起來和操作系統剪貼板相關 , 因時間關系沒有進一步去研究 。

推薦閱讀