我对以下代码的行为感到惊讶:
if(RegQueryValueEx(....)!=ERROR_SUCCESS){
...
}
当它从visual studio运行时它没有输入这个if块,因为密钥确实存在。当在visual studio环境之外运行时,它评估为true并因此进入块,即使查询的密钥存在。经过一些测试后,我发现当我第一次将它保存到一个变量时,它运行总是很好。使用以下代码:
HKEY hSoftwareKey,hAppKey;
DWORD dwLength;
int iStatus=1;
char szBuffer[MAX_PATH];
if(iStatus&&RegOpenKeyA(HKEY_CURRENT_USER,"Software",&hSoftwareKey)!=ERROR_SUCCESS)
iStatus = 0;
if(iStatus&&RegCreateKeyA(hSoftwareKey,"Amine",&hAppKey)!=ERROR_SUCCESS){
iStatus = 0;
}
ZeroMemory(szBuffer,MAX_PATH);
LONG lRet;
lRet = RegQueryValueExA(hAppKey,"One",0,0,reinterpret_cast<LPBYTE>(szBuffer),&dwLength);
这个bevavior是否与__stdcall / WINAPI调用约定有关?如果是这样,请有人解释原因
答案 0 :(得分:3)
在调用RegQueryValueEx()之前,您需要将dwLength
初始化为MAX_PATH
,否则它的值是未定义的。
lpcbData是一个指向变量的指针,该变量指定lpData参数指向的缓冲区大小(以字节为单位)。函数返回时,此变量包含复制到lpData
的数据的大小