欢迎光临散文网 会员登陆 & 注册

输入法开发——<一>基础

2023-07-26 10:28 作者:ProsperousFall  | 我要投稿

不懂的可以看下面的参考: 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/


输入法开发——<一>基础的评论 (共 条)

分享到微博请遵守国家法律