当我的应用程序在“Windows Vista兼容模式”下运行时,我有一个非常奇怪的问题(右键单击EXE,启用兼容模式并选择Windows Vista)。
问题是来自“RegEnumValue”函数的返回缓冲区长度值返回不同的值。
例如,注册表值为“Zoom Player MAX”(15个字符):
在兼容模式下,RegEnumValue的“lpcbData”字段返回值16(包括尾随空终止)。
启用兼容模式后,RegEnumValue的“lpcbData”字段返回值15(不包括尾随空终止)。
是否有针对此的解决方法/补丁,不需要更改我的字符串转换代码?
答案 0 :(得分:7)
没关系。使用低级经典函数从Registry中读取时,您必须能够处理带有和不带null终止符的字符串:
Beware of non-null-terminated registry strings
执行此操作的简单方法是秘密分配一个额外的字符,在阅读时不会告诉API,然后将'\0'
字符附加到它返回的许多字符的末尾。
RegGetValue()
等新功能为您处理此问题。