Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++;? 我是C++的新手,试图从VisualC++ 6中的ReGysz类型的注册表项中获取字符串值。公平地说,我是我的深度和我认为我错过了一些相当明显的东西 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; }_C++_Visual C++_Registry - Fatal编程技术网

如何在C++;? 我是C++的新手,试图从VisualC++ 6中的ReGysz类型的注册表项中获取字符串值。公平地说,我是我的深度和我认为我错过了一些相当明显的东西 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; }

如何在C++;? 我是C++的新手,试图从VisualC++ 6中的ReGysz类型的注册表项中获取字符串值。公平地说,我是我的深度和我认为我错过了一些相当明显的东西 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; },c++,visual-c++,registry,C++,Visual C++,Registry,但在调用RegQueryValueEx的过程中,它会编译并发出访问冲突。任何帮助都将不胜感激:)而不是: LPBYTE installLocation; LPDWORD bufferSize = (unsigned long*)8192; 它应该是: BYTE installLocation[8192]; DWORD bufferSize = sizeof installLocation; 然后在RegQueryValueEx调用中将bufferSize更改为&bufferSize 此外,返

但在调用RegQueryValueEx的过程中,它会编译并发出访问冲突。任何帮助都将不胜感激:)

而不是:

LPBYTE installLocation;
LPDWORD bufferSize = (unsigned long*)8192;
它应该是:

BYTE installLocation[8192];
DWORD bufferSize = sizeof installLocation;
然后在
RegQueryValueEx
调用中将
bufferSize
更改为
&bufferSize

此外,返回的数据不保证以null结尾。所以你也需要处理这个问题:

if (bufferSize && !installLocation[bufferSize - 1])
    --bufferSize;
return string(installLocation, bufferSize);

另一方面,该值通常以null结尾,因为这是
REG_SZ
的文档格式,大多数人都遵循这种格式。您可以检查
installLocation[bufferSize-1]
处的字符是否为空,如果为空,则在调用
string(installLocation,bufferSize)
之前减小
bufferSize
。或者用于保证
installLocation
以null结尾。@RemyLebeau事实上,如果OP可以使用的话,我同意只使用
RegGetValue
。只需知道
RegGetValue()
在XP SP2和更早版本上不可用。但是,对于SP2,您可以使用。当然,现在XPSP3和/或Vista必须是最低基线:-还有一个问题。对于if块,为什么它将bufferSize和installLocation视为布尔值?空值的检查是如何终止的?出于某种原因,此代码正在输出外观有趣的“ÌÌÌÌÌÌÌÌÌÌ”符号。