win32从c ++代码中读取java的偏好

我们的一个程序在Java首选项中写入程序信息(窗口标题,内存等)。 在Windows上,这是可用的registry下。 如何读取Java程序使用c(或c ++)编写的值。

看起来像我应该使用的API是RegGetValue。 这是保证在Windows XP 32位上工作?

java编写的string是UTF-8编码的。 如何读取窗口中的string(win32或vc ++)

欢呼,Jayan

    我钻了一下。 RegGetValue()是一个新的注册表调用,它负责处理查询注册表的传统方法(RegQueryValueEx)的一些基本问题。 有一些关于这里的差异很好的信息: http : //blogs.msdn.com/larryosterman/archive/2006/01/12/512115.aspx

    如果您需要向后兼容性,RegGetValue()不起作用,所以您应该使用RegQueryValueEx从注册表读取数据。

    而现在我认为是真正的问题:

    1. 当你使用RegQueryValueEx()时,你会得到什么?
    2. 你怎么知道存储在注册表中的值是在utf-8编码? 它是以字节数组的形式存储在注册表中,还是作为REG_SZ存储的?
    3. 你有没有使用注册表查看这个值? 你看到了什么?

    所以如果问题是如何将一个UTF-8编码的字符串转换为一个ASCII结尾的字符串,那么你应该改变你的问题的标题。 作为参考,我发现这个库可能是有用的:

    http://utfcpp.sourceforge.net

    当我几分钟前尝试链接时,服务器超时 – 可能是SF维护正在进行。

    但是我建议您确保注册表中的值不会以REG_SZ条目存储。

    RegGetValue是一个更新的API。 如果您希望程序在XP 32位(实际上是在Windows 2000之前的版本)上运行,请使用RegQueryValueEx

    与任何单字节ASCII字符串一样,UTF-8字符串是NUL终止的。 不过,您可能有兴趣将其转换为UTF-16。 为此,您需要使用MultiByteToWideChar ,将CP_UTF8设置为CP_UTF8 。 从UTF-16你可以使用WideCharToMultiByte转换到任何其他代码页。

    要在C ++中访问注册表,您可能对CRegKey ATL类感兴趣。