排错:JNIRegistry无法读取注册表中的中文内容
来源:互联网 发布:知乎中国相控阵雷达 编辑:程序博客网 时间:2024/06/18 03:47
问题
使用这个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。
使用这个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。
- 排错:JNIRegistry无法读取注册表中的中文内容
- 读取注册表内容
- 关于读取文件中的中文内容
- MSXML无法读取xml元素内容中的空格
- C#读取注册表中的数据:
- java读取注册表中的信息
- 读取Excel中的内容
- 读取pdf中的内容
- 读取txt中的内容!!!
- 读取word中的内容
- 读取文本文件中的内容
- 读取文件中的内容
- CI卡无法读取内容
- 创建注册表,设置和读取注册表中的值
- C#如何读取注册表中的注册信息
- 排错:中文显示乱码
- FLASH读取XML中的内容
- C#读取网页中的内容
- Dicom Image Viewer for iPad
- 我和你 (1)
- 函数指针
- 在JavaWEB中将Ajax动态查询结果转换成List<Map>型JavaScript数组
- 注册表操作
- 排错:JNIRegistry无法读取注册表中的中文内容
- UC故事2011/11/18
- java中不用break跳出for循环的方式
- 99. Come what may, heaven won't fall. 做你的吧,天塌不下来
- Codeblocks+MinGW+wxWidgets搭建方法
- 比较常用,功能不错的站长工具推荐
- Weblogic 是64位还是32位的判断方法
- zoj 1708 Robot Motion(简单)
- RenderScript 学习