我们的一个程序在 Java 首选项中写入程序信息(窗口标题、内存等)。在 Windows 上,这在注册表下可用。如何读取 Java 程序使用 c(或 c++)编写的值。
看起来我应该使用的 API 是 RegGetValue。这能保证在 Windows XP 32 位上运行吗?
java写的String是UTF-8编码的。如何在 Windows(win32 或 vc++)中读取此类字符串
干杯,贾扬
我们的一个程序在 Java 首选项中写入程序信息(窗口标题、内存等)。在 Windows 上,这在注册表下可用。如何读取 Java 程序使用 c(或 c++)编写的值。
看起来我应该使用的 API 是 RegGetValue。这能保证在 Windows XP 32 位上运行吗?
java写的String是UTF-8编码的。如何在 Windows(win32 或 vc++)中读取此类字符串
干杯,贾扬
我对此进行了一些研究。RegGetValue() 是一个新的注册表调用,它处理了查询注册表的传统方法 (RegQueryValueEx) 的一些潜在的麻烦。这里有一些关于差异的好信息:http: //blogs.msdn.com/larryosterman/archive/2006/01/12/512115.aspx
如果您需要向后兼容,RegGetValue() 将不起作用,因此您应该使用 RegQueryValueEx 从注册表中读取数据。
现在谈谈我认为真正的问题:
因此,如果问题是如何将 UTF-8 编码字符串转换为 ascii 空终止字符串,那么您可能应该更改问题的标题。作为参考,我发现这个库可能有用:
当我几分钟前尝试链接时,服务器超时 - 可能正在进行 SF 维护。
但我建议您确保注册表中的值没有存储为 REG_SZ 条目。
RegGetValue
是一个较新的 API。如果您希望您的程序在 XP 32 位(实际上早于 Windows 2000)上运行,请使用RegQueryValueEx
与任何单字节 ASCII 字符串一样,UTF-8 字符串以 NUL 结尾。但是,您可能有兴趣将其转换为 UTF-16。为此,您需要使用MultiByteToWideChar,将 CodePage 设置为CP_UTF8
. 从 UTF-16,您可以使用WideCharToMultiByte转换为任何其他代码页。
要在 C++ 中访问注册表,您可能对CRegKey ATL 类感兴趣。