登陆 | 免费注册(只需一分钟) | 会员中心

聚宝网   购物专题 基金专题 性专题 饮食专题 教育专题 生活大参考 园林资讯 园艺库 健康专题
  论文专题 家庭养花 园林景观 盆景奇石 激情图库 农业资料库 园林古建 英文站 花卉栽培

聚宝网免费为您提供 最新IT资讯

 

首页 > 编程文档 > C++
帮忙看看以下读写注册表的代码有错误吗?为什么只能取道第一个RegQueryValueEx语句的值,后面两条RegQueryValueEx就查询不出值??
时间:2007-06-17  www.jubao163.com  来源: 不详

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);
--------------------------------------------------------------- 这个问题很可能是因为您调用了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))。




推荐文章
联盟网站

浙ICP备 :07003766号 Copyright © 2001-2007 JUBAO163,All rights reserved.