win32 注册表写入格式问题

用 RegSetValueEx 函数写注册表信息,信息类型是(BYTE*),要写入WCHAR类型的数据,直接强转会出错:

//要写入的WCHAR类型的数据
WCHAR FileName[MAX_PATH];
lstrcpy(FileName, _T("张三"));
//注册表操作
HKEY hKey = NULL;
LONG lReg = RegOpenKey(HKEY_CLASSES_ROOT, _T("xx"), &hKey);
if (lReg != ERROR_SUCCESS)
{
	return 0;
}
RegSetValueEx(hKey, _T("nowFileName"), NULL, REG_SZ, (BYTE*)FileName, sizeof(FileName) + 1);
RegCloseKey(hKey);

这样写注册表内容:
在这里插入图片描述
后边会有三个小点,尽管数值是对的
win32 注册表写入格式问题_第1张图片
但是要读取这个值就会出错
在这里插入图片描述
应该是格式保存的问题,但是

//要写入的WCHAR类型的数据
WCHAR FileName[MAX_PATH];
lstrcpy(FileName, _T("张三"));

//先定义个BYTE*类型值的保存FileName
BYTE *FileNameByte = (BYTE*)FileName;

...

RegSetValueEx(hKey, _T("nowFileName"), NULL, REG_SZ, FileNameByte, sizeof(FileNameByte) + 1);

这个时候正确的读取了
在这里插入图片描述
在这里插入图片描述
还有就是直接写也是可以成功的

RegSetValueEx(hKey, _T("nowFileName"), NULL, REG_SZ, (BYTE*)_T("张三"), sizeof(_T("张三")) + 1);

你可能感兴趣的:(win32 注册表写入格式问题)