现在的位置: 首页 > 综合 > 正文

排错:JNIRegistry无法读取注册表中的中文内容

2018年04月10日 ⁄ 综合 ⁄ 共 481字 ⁄ 字号 评论关闭

问题
使用这个DLL无法正确读取注册表中的中文,一个汉字显示两个问号

解决
1、得到的这个版本是VC6的,转为VS2008后发现其语言没有设置,设置为支持Unicode。(这样API返回的缓冲区里就已经是两个字节代表一个字符了)
2、为该DLL增加一个jstring转Unicode的方法,替代原来的把jstring转为ANSI字符的地方(具体方法可以在网上搜“jstring Unicode”),否则连注册表项都打不开。
此处要注意,用malloc开辟空间时,长度是(字符数目+1)×2,否则会出现Java的Outofmemory异常。
3、在函数getstringvalue的末尾,直接调用strBufToJstring(这个函数名可能记忆不准确),其中字符串长度是注册表函数返回的缓冲区长度的二分之一(返回的是字节数,但strBurToJstring需要的是字符数目,在Unicode中,一个字符占两个字节)。
4、还有一些零星修改,把原来的char改写为wchar_t

备注
1、时间仓促,这种修改只是临阵抱佛脚。
2、从长远计,这个DLL应彻底改造,全部使用Unicode。

抱歉!评论已关闭.