HKEY hkey;
BOOL    bFromNotes=FALSE; ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\ZXCTC\\UserManager",0,KEY_ALL_ACCESS,
&hkey); LPBYTE szContractID=new BYTE[80];
LPBYTE szApprovePerson=new BYTE[80];
LPBYTE szMaterialQuery=new BYTE[80]; DWORD dwValueType=REG_SZ;
DWORD dwValueLen=80; strcpy((LPSTR)szApprovePerson,"");
strcpy((LPSTR)szContractID,"");
strcpy((LPSTR)szMaterialQuery,"");
::RegQueryValueEx(hkey,"MaterialQuery",NULL,&dwValueType,szMaterialQuery,
&dwValueLen);      //只能查询出"MaterialQuery"的值,后面两个都查不出,为什么??
::RegQueryValueEx(hkey,"ApprovePerson",NULL,&dwValueType,szApprovePerson,
&dwValueLen);
::RegQueryValueEx(hkey,"ContractID",NULL,&dwValueType,szContractID,
&dwValueLen); ::RegSetValueEx(hkey,"ApprovePerson",NULL,dwValueType,(LPBYTE)"",(DWORD)0);
::RegSetValueEx(hkey,"ContractID",NULL,dwValueType,(LPBYTE)"",(DWORD)0);
::RegSetValueEx(hkey,"MaterialQuery",NULL,dwValueType,(LPBYTE)"",(DWORD)0); ::RegCloseKey(hkey);

解决方案 »

  1.   

    RegSetValueEx的最后一个参数用取地址吗?看看是不是这的问题
      

  2.   

    我刚好和你相反,dwValueType,dwValueLen没取地址,szApprovePerson取了。
      

  3.   

    "dwValueType,dwValueLen没取地址"不取地址的话,编译都会出错呀,另外,重要的是查询出数值,设置值不是很重要
      

  4.   

    跟奇怪的是,如果我把后面两条RegQueryValueEx语句中的一条放到前面,那么就可以这条就可以取到,而后面两条又取不到。也就是说用RegQueryValueEx是只能第一条这样的语句能从注册表里取到数值,其他的都不能。到底为什么啦??
      

  5.   

    这个问题很可能是因为您调用了RegQueryValueEx之后,没有恢复接收数据的缓冲区的大小所导致的。RegQueryValueEx函数的原型如下:LONG RegQueryValueEx(
      HKEY hKey,            // handle to key
      LPCTSTR lpValueName,  // value name
      LPDWORD lpReserved,   // reserved
      LPDWORD lpType,       // type buffer
      LPBYTE lpData,        // data buffer
      LPDWORD lpcbData      // size of data buffer
    );其中最后一个参数是输入输出型的,输入时表示接受数据的缓冲区的大小,当该函数返回时,该值包含了复制到缓冲区的数据的大小。而当缓冲区的大小不能容纳要获取的数据时,该函数返回ERROR_MORE_DATA并在lpcbData中存放了实际需要的缓冲区的大小(字节数)。建议您在每次调用之前恢复原先的缓冲区的大小,问题应该就解决了。
    例如:
    ::RegQueryValueEx(hkey,"MaterialQuery",NULL,&dwValueType,szMaterialQuery,
    &dwValueLen);
    dwValueLen = 80;
    ::RegQueryValueEx(hkey,"ApprovePerson",NULL,&dwValueType,szApprovePerson,
    &dwValueLen);
    dwValueLen = 80;
    ::RegQueryValueEx(hkey,"ContractID",NULL,&dwValueType,szContractID,
    &dwValueLen);
    如果需要进一步的信息,您可以参看:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/regapi_3wzc.asp等有关的MSDN信息- 微软全球技术中心 VC技术支持本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款
    (http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。为了为您创建更好的讨论环境,请参加我们的用户满意度调查
    (http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。