动态输入法 windows 版一直以来有一个 bug ,就是在多个操作系统中安装报错,迄今已有4年多。今天又对这个问题进行了排查,基本解决了,有一些要点记录如下。
1。关于安装报错(模块加载失败 请确保该二进制文件在指定的路径中。。。)的解决办法:编译设置,应使用静态MFC。参考:模块加载失败 请确保该二进制文件在指定的路径中 找不到指定的模块_p312011150的博客-CSDN博客_regsvr32模块加载失败请确保二进制
项目配置属性--->常规--->MFC的使用 修改为在静态库中使用MFC
2。 关于使用静态MFC,Win32编译报错(error LNK2019: 无法解析的外部符号)的解决办法:编译设置,添加 gdi32.lib 。参考:
Visual Studio添加lib到链接依赖项的几种方法-蒲公英云
在项目上点击右键->【属性】->【配置属性】->【链接器】->【输入】->【附加依赖项】,点击编辑,添加相应库文件。
3。关于编译属性的其他要点:
3。1。配置和平台的选取状态,并不是编译的状态,也就是不管「平台」选win32还是x64,生成时都可以生成win32和x64。
3。2。常规-》输出目录,目标文件名,都可自定义,可把 win32,x64的输出设为同一个目录,但用文件名区分,加 _x86 _64。
奇怪的是,C++ 中指定的 jvm 路径是 xxx/jvm/x64,而安装包中准备的 jvm 则包括 x86 和 x64两种,而代码怎么去选择正确的路径,竟然完全找不到。经试验:
20180814 22:08编译的x86文件:
1。如果在 x86CPU 32bit Win7上,设计的路径是安装正常的,但如果把 jvm/x64 改名为 jvm/x86,则启动报错:
xxx\jvm\x86\jre\bin\server\jvm.dll 没有被指定在 Windows上运行,或者它包含错误。
2。如果在 x64CPU 32bit Win8.1上,安装报错(没有使用静态 MFC导致)所以该问题没有暴露。
可能是20180814,在22:08专门编译了一个x86路径的 x86版,22:10专门编译了一个 x64路径的 x64版。而在最终的代码中,路径写为 x64,使过程无法追溯。
20221209 23:43 编译的文件(代码路径为 x64,一次编译了 x86和 x64两个版本):
在x86CPU 32bit Win7上、 x64CPU 32bit Win8.1上,设计的路径安装报错:
xxx\jvm\x64\jre\bin\server\jvm.dll 没有被指定在 Windows上运行,或者它包含错误。
但如果把 jvm/x86 强制改名为 jvm/x86,则安装正常。
Debug 要点:
1。在记事本中启用动态输入法时,勿必切换成其他输入法再退出,否则可能引起 explorer.exe 崩溃。
2。在 cmd 中运行 bat,省去每次启用管理权限。
3。如果 dll 被进程占用,从任务管理器进入资源监视器,CPU tab,查找句柄 dynatyper,找到后杀进程。
4。UniCode 下CString 转 char*,利用WideCharToMultiByte进行转换,中文乱码的解决方案 - junyuz - 博客园
解决了一个长久的问题。