由于 TSF 输入法的本质是提供两个 dll 文件,所以,我们这里的研究就是围绕着如何写好这个 dll 动态链接库来展开的。
并且,本次的研究主体是微软提供的 Sample TSF 代码。当然,过程中不排除会包括我自己新添加的代码、特性和优化以及修复等等。
注意,这个代码是可以正常编译和运行的。
如果有同样对输入法十分感兴趣的同志有遇到的什么问题,欢迎找到我的联系方式和我进行这方面的交流。
DllMain
DllMain
函数在 dll 被加载和卸载时被调用,它通常用于执行初始化和清理工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #include "Private.h" #include "Globals.h"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID pvReserved) { pvReserved;
switch (dwReason) { case DLL_PROCESS_ATTACH:
Global::dllInstanceHandle = hInstance;
if (!InitializeCriticalSectionAndSpinCount(&Global::CS, 0)) { return FALSE; }
if (!Global::RegisterWindowClass()) { return FALSE; }
break;
case DLL_PROCESS_DETACH:
DeleteCriticalSection(&Global::CS);
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break; }
return TRUE; }
|