视觉 如何在C++中正确进行 RegQueryValueEx 调用
visual How do I correctly make a RegQueryValueEx call in C++?
我是 c++ 的新手,并试图从 Visual c++ 6.0 中 reg_sz 类型的注册表项中获取字符串值。公平地说,我超出了我的深度,我认为我错过了一些相当明显的东西。
string FindRegistryValue(){
string location;
LONG lResult;
LPBYTE installLocation;
LPDWORD bufferSize= (unsigned long*)8192;
lResult = RegQueryValueEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\1234\uninstallString",
NULL, NULL, installLocation, bufferSize);
location = *installLocation;
return location;
}
但是,它在调用 RegQueryValueEx 期间会发出访问冲突。任何帮助将不胜感激:)
而不是:
LPBYTE installLocation;
LPDWORD bufferSize = (unsigned long*)8192;
它真的应该是:
BYTE installLocation[8192];
DWORD bufferSize = sizeof installLocation;
然后bufferSize
应在RegQueryValueEx
调用中更改为&bufferSize
。
此外,返回的数据不保证以 null 结尾。所以你也需要处理这个问题:
if (bufferSize && !installLocation[bufferSize - 1])
--bufferSize;
return string(installLocation, bufferSize);
相关文章:
- RegQueryValueEx每次都返回不同的值
- 使用RegQueryValueEx将reg_sz作为输入并将其用作char数组
- 使用 WriteFile 将 RegQueryValueEx 值写入文件失败
- RegQueryValueEx 不返回值的数据
- 使用 RegQueryValueEx 从注册表中获取计算机名称
- 从RegQueryValueEx()DWORD返回无效数据
- RegQueryValueEx,需要一些帮助
- 视觉 如何在C++中正确进行 RegQueryValueEx 调用
- problems with RegQueryValueEx
- RegQueryValueEx返回另一个寄存器的值的奇怪行为
- RegQueryValueEx给出奇怪的数据
- RegQueryValueEx() api在XP上没有提供正确的设置值
- 通过RegQueryValueEx和RegGetValue获取注册表值时的怪异行为