CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

读注册表错

楼主afu88(afu88)2003-12-01 09:47:20 在 VC/MFC / 基础类 提问

HKEY   hKEY;//  
  LPBYTE   DATE_GET=new   BYTE[1];  
  LPBYTE   COUNT_GET=new   BYTE[1];  
  LPCTSTR   data_Set="Software\\Microsoft\\";  
  (::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,   0,   KEY_WRITE,   &hKEY));  
  DWORD   type_1=REG_SZ   ;      
  DWORD   cbData_1=1;    
  第一次  
  ret1=(::RegSetValueEx(hKEY,   "DATE",   NULL,type_1,   DATE_GET,   cbData_1));  
  ret2=(::RegSetValueEx(hKEY,   "COUNT",   NULL,type_1,   COUNT_GET,   cbData_1));  
  ::regclsoe  
   
  成功,注册表已经有了DATE,COUNT值了,  
  但再次  
  (::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,   0,   KEY_READ,   &hKEY));  
  ret1=(::RegQueryValueEx(hKEY,   "DATE",   NULL,&type_1,   DATE_GET,&cbData_1));  
  ret2=(::RegQueryValueEx(hKEY,   "COUNT",   NULL,&type_1,COUNT_GET,&cbData_1));  
  ret1,ret2返回不成功,为什么?  
  问题点数:0、回复次数:9Top

1 楼modena(非云)回复于 2003-12-01 11:33:13 得分 0

REG_SZ的键值包括'\0'结尾,因此你的DATA_GET等等至少需要2Top

2 楼pengcar()回复于 2003-12-01 12:08:05 得分 0

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  
  );  
   
  lpcbData    
  If   lpData   is   NULL,   and   lpcbData   is   non-NULL,   the   function   returns   ERROR_SUCCESS,   and   stores   the   size   of   the   data,   in   bytes,   in   the   variable   pointed   to   by   lpcbData.   This   lets   an   application   determine   the   best   way   to   allocate   a   buffer   for   the   value's   data.    
   
  Top

3 楼afu88(afu88)回复于 2003-12-01 16:44:43 得分 0

HKEY   hKEY;//  
  LPBYTE   DATE_GET=new   BYTE[2];  
  LPBYTE   COUNT_GET=new   BYTE[2];  
  LPCTSTR   data_Set="Software\\Microsoft\\";  
  (::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,   0,   KEY_WRITE,   &hKEY));  
  DWORD   type_1=REG_SZ   ;      
  DWORD   cbData_1=2;    
  第一次  
  ret1=(::RegSetValueEx(hKEY,   "DATE",   NULL,type_1,   DATE_GET,   cbData_1));  
  ret2=(::RegSetValueEx(hKEY,   "COUNT",   NULL,type_1,   COUNT_GET,   cbData_1));  
  ::regclsoe  
   
  成功,注册表已经有了DATE,COUNT值了,  
  但再次  
  (::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,   0,   KEY_READ,   &hKEY));  
  ret1=(::RegQueryValueEx(hKEY,   "DATE",   NULL,&type_1,   DATE_GET,&cbData_1));  
  ret2=(::RegQueryValueEx(hKEY,   "COUNT",   NULL,&type_1,COUNT_GET,&cbData_1));  
  ret1,ret2返回不成功,为什么?  
   
  改2了,还是ret1,ret2返回不成功,为什么?Top

4 楼modena(非云)回复于 2003-12-01 17:38:23 得分 0

可能的原因:  
  1.RegOpenKeyEx出错,hKey==NULL;  
  2.type_1预先必须赋值,type_1=REG_SZ;  
  3.cbData_1预先必须赋值,为分配空间的大小,cbData_1=2;  
  4.分配的内存空间不足  
  具体原因不明,建议:  
  在代码的后面增加如下代码,看看弹出的对话框内提示的出错信息是什么?  
  if(   ret1   !=   ERROR_SUCCESS   )  
  {  
  LPVOID   lpMsgBuf;  
  FormatMessage(    
          FORMAT_MESSAGE_ALLOCATE_BUFFER   |    
          FORMAT_MESSAGE_FROM_SYSTEM   |    
          FORMAT_MESSAGE_IGNORE_INSERTS,  
          NULL,  
          GetLastError(),  
          MAKELANGID(LANG_NEUTRAL,   SUBLANG_DEFAULT),   //   Default   language  
          (LPTSTR)   &lpMsgBuf,  
          0,  
          NULL    
  );  
  //   Process   any   inserts   in   lpMsgBuf.  
  //   ...  
  //   Display   the   string.  
  MessageBox(   NULL,   (LPCTSTR)lpMsgBuf,   "Error",   MB_OK   |   MB_ICONINFORMATION   );  
  //   Free   the   buffer.  
  LocalFree(   lpMsgBuf   );  
  }Top

5 楼afu88(afu88)回复于 2003-12-03 16:56:46 得分 0

加了提示为“操作成功完成”Top

6 楼afu88(afu88)回复于 2003-12-04 13:31:59 得分 0

加了,提示为“操作成功完成”,但为什么还返回!=   ERROR_SUCCESS   呢?Top

7 楼afu88(afu88)回复于 2003-12-05 17:53:18 得分 0

加了,提示为“操作成功完成”,但为什么还返回!=   ERROR_SUCCESS   呢?  
  Top

8 楼michaelwan(临风)回复于 2003-12-05 23:12:56 得分 0

奇怪?Top

9 楼modena(非云)回复于 2003-12-10 14:55:55 得分 0

ERROR_SUCCESS   =   0   就是成功的返回值  
  以下是我测试成功的代码:  
   
  HKEY hRootKey =   HKEY_USERS;  
  HKEY hKey;  
  char pszSubKey[MAX_PATH];  
  strcpy(pszSubKey,   ".Default\\Software\\Test\\test1");  
   
  DWORD   dwRet   =   ::RegCreateKeyEx(hRootKey,   pszSubKey,   0,   "Option",   REG_OPTION_VOLATILE,   KEY_READ   |   KEY_WRITE   |   KEY_CREATE_SUB_KEY,   NULL,   &hKey,   &dwDisposition);  
   
  if(dwRet   !=   ERROR_SUCCESS)  
  {  
  return;  
  }  
   
  BYTE byData[1024];  
  DWORD dwLen =   1023;  
  DWORD dwType =   REG_SZ;  
   
  memset(   byData,   0,   1024   );  
  dwRet =   ::RegQueryValueEx(   hKey,   "DataServer",   0,   &dwType,   byData,   &dwLen   );  
  CString     strDataServer =   (LPCTSTR)byData;  
   
  //   strDataServer返回了注册表中正确的值  
  Top

相关问题

  • 读注册表
  • 万分火急!注册表读取错误!
  • C#读取注册表信息时出错,请高手指点
  • 怎样读注册表
  • 怎么读注册表?
  • 关于读取注册表。。
  • 怎样读写注册表??
  • 关于读取注册表
  • 如何读写注册表
  • 如何读写注册表?

关键词

  • 代码
  • date
  • cbdata
  • hkey
  • 注册表
  • lpmsgbuf
  • lpcbdata
  • ret
  • lpbyte
  • regqueryvalueex

得分解答快速导航

  • 帖主:afu88

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo