输入法开发——<一>基础
不懂的可以看下面的参考: Other
开发建议
使用 WindowsAPI 效率比 CRT 高,所以建议优先使用 WinAPI
TSF 输入法文件
TSF 输入法,是一个可注册的,包含 COM 接口的 dll
内存和引用
COM 接口都继承自 IUnknown
线程模型
DLL DEF
编译 dll 需要外露接口,这不仅需要在 *.def 文件中定义

还要在属性中添加模块文件,尽管 VS 可以自动添加,但建议你检查一下。
还需要关闭增量链接
这个库视情况而定

不使用的话,这个也是要关闭的

DllMain
IME 中,DllMain 的工作有 传递句柄、注册窗口等
引用管理
DllGetClassObject 每返回一个对象(ClassFactory),引用 += 1 每释放一个 ClassFactory 时 引用 -= 1 。引用 == 0 时,DllCanUnloadNow 才可以返回 S_OK。
但是不要把 引用 搞成负的
概要
先来直白看下 APP 和 IME 都需要干啥。(当然,APP 很多工作都由操作系统默认控件代为实现了) APP:
创建 ThreadMgr ThreadMgr > Activate 创建 DocumentMgr,创建 Context。
ThreadMgr > SetFocus(DocumentMgr) DocumentMgr > Push(Context)
IME: 注册 TextInputProcessor 实现
TextInputProcessor->Activate
ThreadMgr->GetFocus(DocumentMgr)
DocumentMgr->GetTop(Context)

因为 C++ 已经有 Sample 了,我的项目将使用 C 完成 后期的示例可能不适用于你
下一章讲接口,给我一点时间去翻译
参考

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/