当我的应用程序在“Windows Vista兼容性模式”下运行(右键单击EXE,启用兼容模式并selectWindows Vista时),我有一个非常奇怪的问题。
问题是来自“RegEnumValue”函数的返回缓冲区长度值返回不同的值。
例如,registry值为“Zoom Player MAX”(15个字符):
在兼容模式下,RegEnumValue的“lpcbData”字段返回值16(包括结尾空终止符)。
启用兼容模式后,RegEnumValue的“lpcbData”字段将返回值15(不包括结尾空终止符)。
有没有解决方法/修补程序,这不需要更改我的string转换代码?
这应该不重要。 使用低级别的经典函数从注册表中读取时,必须能够处理带和不带空终止符的字符串:
注意非空终止的注册表字符串
这样做的简单方法是在读取时秘密分配一个不告诉API的额外字符,然后将'\0'
字符附加到返回的许多字符的末尾。
像RegGetValue()
更新的功能为您处理。