WinCE 調試某手寫IME時遇到的載入手寫庫失敗的問題

來源:互聯網
上載者:User
調試某手寫IME時遇到的載入手寫庫失敗的問題在 WinCE6.0 下使用此手寫IME SDK 做了一個單獨的手寫輸入程式A(MFC Dialog 架構)。正常情況下,可以正常使用。此 A 程式,採用 LIB 方式載入此的手寫 SDK。在運行某一帶手寫輸入的程式 B 後,A 程式無法運行。首先懷疑 B 程式中也使用了此手寫 SDK,導致載入衝突。但仔細想想程式 B 和程式 A 應該運行在不同的進程空間,且最後確定程式 B 並未使用此手寫。進一步測試發現,如果程式 A 先運行,再程式 B 程式。雖然 B 可以正常運行,在手寫輸入後無法識別。由於 A 程式,在 B 程式運行後根本無法運行,無法進行調試來分析問題的原因。參考再三,決定將 A 程式調用手寫 SDK 的方式由靜態載入修改為動態載入。分析 A 程式,發現只調用了 4 個手寫 SDK 的程式。採用 LoadLibrary() 載入 DLL 和 GetProcAddress() 載入此 4 個函數後(1) 在不運行 B 程式時,4 個函數載入都成功,手寫功能可以正常使用;(2) 在先運行 B 程式後,發現有三個函數載入是沒有問題的,其中一個函數無法載入成功,GetLastError() 得到的錯誤是: 87(參數不正確)。在修改為動態載入後,測試過先運行 A 程式,再運行 B 程式。和以前的結果是一樣的,B 程式的手寫無法識別。再次測試,將 A 程式中對手寫 SDK 的初始化代碼刪除後,先運行 A、再運行 B 程式,B 程式一樣無法手寫辨識。至此,都未解決問題。查看此 B 程式,發現其雖然沒有使用此手IME。但其使用的IME與此手寫IME的 DLL 名稱、DLL 中函數的名稱完全是一樣的。將 A 程式使用的此手寫 SDK 的動態庫 DLL 改名,再次進行測試發現 A 程式和 B 程式可以完美的共存。進行到這一步,問題已經解決,但對問題的根本原因(也就是解析)還不明白。問題的關鍵在於運行 B 程式後為何 A 程式動態載入 DLL 中的函數時,那個函數會載入失敗?兩個獨立的進程空間,為什麼會衝突?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.