读注册表错
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




