輸入法開發(fā)——<一>基礎(chǔ)
不懂的可以看下面的參考: Other
開發(fā)建議
使用 WindowsAPI 效率比 CRT 高,所以建議優(yōu)先使用 WinAPI
TSF 輸入法文件
TSF 輸入法,是一個(gè)可注冊(cè)的,包含 COM 接口的 dll
內(nèi)存和引用
COM 接口都繼承自 IUnknown
線程模型
DLL DEF
編譯 dll 需要外露接口,這不僅需要在 *.def 文件中定義

還要在屬性中添加模塊文件,盡管 VS 可以自動(dòng)添加,但建議你檢查一下。
還需要關(guān)閉增量鏈接
這個(gè)庫(kù)視情況而定

不使用的話,這個(gè)也是要關(guān)閉的

DllMain
IME 中,DllMain 的工作有?傳遞句柄、注冊(cè)窗口等
引用管理
DllGetClassObject 每返回一個(gè)對(duì)象(ClassFactory),引用?+= 1 每釋放一個(gè)?ClassFactory 時(shí)?引用?-=?1 。引用 == 0 時(shí),DllCanUnloadNow 才可以返回 S_OK。?
但是不要把 引用 搞成負(fù)的
概要
先來(lái)直白看下 APP 和 IME 都需要干啥。(當(dāng)然,APP 很多工作都由操作系統(tǒng)默認(rèn)控件代為實(shí)現(xiàn)了) APP:?
創(chuàng)建 ThreadMgr ThreadMgr > Activate 創(chuàng)建 DocumentMgr,創(chuàng)建 Context。?
ThreadMgr > SetFocus(DocumentMgr) DocumentMgr > Push(Context)?
IME: 注冊(cè) TextInputProcessor 實(shí)現(xiàn)?
TextInputProcessor->Activate?
ThreadMgr->GetFocus(DocumentMgr)?
DocumentMgr->GetTop(Context)

因?yàn)?C++ 已經(jīng)有?Sample 了,我的項(xiàng)目將使用?C 完成? 后期的示例可能不適用于你
下一章講接口,給我一點(diǎn)時(shí)間去翻譯
參考

SampleIME
https://github.com/microsoft/Windows-classic-samples/tree/main
/IME
Learn Microsoft
https://learn.microsoft.com/zh-cn/windows/win32/tsf/text-services-framework-interfaces
Other
https://yangyuan.github.io/