您的位置:首页 > 产品设计 > UI/UE

RegQueryValueEx函数不能获取到键值?

2015-07-28 14:49 309 查看
使用这个函数,返回值是0,但是获取到的键值只是字符串的第一个字母。这是为什么?谢谢。急求答案。

int _tmain(int argc, _TCHAR* argv[])
{

	const int  MAX_BUFFER_LEN = 80;
	char  szBuffer[MAX_BUFFER_LEN];
	DWORD dwNameLen;
	dwNameLen = MAX_BUFFER_LEN;

	TCHAR aa[800];
	if (!GetUserName(aa, &dwNameLen))  //得到计算机用户名 
	{
		return 1;
	}

HKEY hKEY;//定义有关的hKEY,在查询结束时要关闭
	//打开与路径 data_Set相关的hKEY
	LPCTSTR data_Set = _T("Software\\Platformbaseinfo\\AppUrl\\");
	//访问注册表,hKEY则保存此函数所打开的键的句柄
	long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKEY));
	if (ret0 != ERROR_SUCCESS)//如果无法打开hKEY,打开指定注册表失败,则中止程序的执行,
	{
		return 1;
	}
	//查询有关的数据
	LPBYTE addr_Get = new BYTE[1024];//定义
	DWORD type_1 = REG_SZ;//定义数据类型
	DWORD cbData_1 = 1024;//定义数据长度
	long ret1 = ::RegQueryValueEx(hKEY, aa, NULL, &type_1, addr_Get, &cbData_1);
	if (ret1 != ERROR_SUCCESS)
	{
		return 1;
	}

	//得到注册表中地址信息
	delete[] addr_Get;
	//关闭打开的hKEY
	::RegCloseKey(hKEY);

return 0;
}

该段代码中要获取数据的变量就是addr_Get,但是这个变量只读取到键值字符串的第一个字母,这个是为啥?
解答:
代码改为 红色部分为改动。
int _tmain(int argc, _TCHAR* argv[]){	const int  MAX_BUFFER_LEN = 80;	char  szBuffer[MAX_BUFFER_LEN];	DWORD dwNameLen;	dwNameLen = MAX_BUFFER_LEN;	TCHAR aa[80];	if (!GetUserName(aa, &dwNameLen))  //得到计算机用户名 	{				return 1;	}		HKEY hKEY;//定义有关的hKEY,在查询结束时要关闭	//打开与路径 data_Set相关的hKEY	LPCTSTR data_Set = _T("Software\\Platformbaseinfo\\AppUrl\\");	//访问注册表,hKEY则保存此函数所打开的键的句柄	long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKEY));	if (ret0 != ERROR_SUCCESS)//如果无法打开hKEY,打开指定注册表失败,则中止程序的执行,	{				return 1;	}	//查询有关的数据	//LPBYTE addr_Get = new BYTE[1024];//定义	TCHAR addr_Get[500];	DWORD type_1 = REG_SZ;//定义数据类型	DWORD cbData_1 = 1024;//定义数据长度			long ret1 = ::RegQueryValueEx(hKEY, aa, NULL, &type_1, (LPBYTE)addr_Get, &cbData_1);	if (ret1 != ERROR_SUCCESS)	{		return 1;	}	//得到注册表中地址信息		//关闭打开的hKEY	::RegCloseKey(hKEY);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: