RegEnumValue在Vista兼容模式下返回不同的缓冲区大小

bLi*_*ght 1 windows delphi registry winapi

当我的应用程序在"Windows Vista兼容模式"下运行时,我有一个非常奇怪的问题(右键单击EXE,启用兼容模式并选择Windows Vista).

问题是来自"RegEnumValue"函数的返回缓冲区长度值返回不同的值.

例如,注册表值为"Zoom Player MAX"(15个字符):

在兼容模式下,RegEnumValue的"lpcbData"字段返回值16(包括尾随空终止).

启用兼容模式后,RegEnumValue的"lpcbData"字段返回值15(不包括尾随空终止).

是否有一个解决方法/修补程序,不需要更改我的字符串转换代码?

And*_*ers 7

没关系.使用低级经典函数从Registry中读取时,您必须能够处理带有和不带null终止符的字符串:

注意非空终止的注册表字符串

执行此操作的简单方法是秘密分配一个额外的字符,在阅读时不要告诉API,然后将'\0'字符追加到它返回的许多字符的末尾.

更新的功能,如RegGetValue()为您处理此问题.