向注册表写入中文,在一台机器运行正常,使用RegSetValueExA 及 RegSetValueExW均正常。在另一台机器上,RegSetValueExA 及 RegSetValueExW,都出现乱码,这是怎么回事,哪位大神帮忙解答一下bool SetRegValue(HKEY root, const LPCSTR regPath, const LPCSTR name, const string strReadRes, DWORD dwAccess)
{
HKEY hKey;
WCHAR szLocation[MAX_PATH] = { 0 };
DWORD dwSize = sizeof(DWORD);
DWORD dwType = REG_SZ;
LONG ret; ret = RegOpenKeyExA(root, regPath, 0, dwAccess, &hKey);
DWORD len = strReadRes.size(); if (ret == ERROR_SUCCESS) {
if (ERROR_SUCCESS == RegSetValueExA(hKey, name, 0, REG_SZ, (CONST BYTE*)strReadRes.c_str(), len + 1)) {
RegCloseKey(hKey);
return true;
}
}
RegCloseKey(hKey);
return false;
}bool SetRegValueW(HKEY root, LPCWSTR regPath, LPCWSTR name, const wstring wstrReadRes, DWORD dwAccess)
{
HKEY hKey;
WCHAR szLocation[MAX_PATH] = { 0 };
DWORD dwSize = sizeof(DWORD);
DWORD dwType = REG_SZ;
LONG ret; ret = RegOpenKeyExW(root, regPath, 0, dwAccess, &hKey);
DWORD len = wstrReadRes.size() * 2; if (ret == ERROR_SUCCESS) {
if (ERROR_SUCCESS == RegSetValueEx(hKey, name, 0, REG_SZ, (CONST BYTE*)wstrReadRes.c_str(), len + 1)) {
RegCloseKey(hKey);
return true;
}
}
RegCloseKey(hKey);
return false;
}
{
HKEY hKey;
WCHAR szLocation[MAX_PATH] = { 0 };
DWORD dwSize = sizeof(DWORD);
DWORD dwType = REG_SZ;
LONG ret; ret = RegOpenKeyExA(root, regPath, 0, dwAccess, &hKey);
DWORD len = strReadRes.size(); if (ret == ERROR_SUCCESS) {
if (ERROR_SUCCESS == RegSetValueExA(hKey, name, 0, REG_SZ, (CONST BYTE*)strReadRes.c_str(), len + 1)) {
RegCloseKey(hKey);
return true;
}
}
RegCloseKey(hKey);
return false;
}bool SetRegValueW(HKEY root, LPCWSTR regPath, LPCWSTR name, const wstring wstrReadRes, DWORD dwAccess)
{
HKEY hKey;
WCHAR szLocation[MAX_PATH] = { 0 };
DWORD dwSize = sizeof(DWORD);
DWORD dwType = REG_SZ;
LONG ret; ret = RegOpenKeyExW(root, regPath, 0, dwAccess, &hKey);
DWORD len = wstrReadRes.size() * 2; if (ret == ERROR_SUCCESS) {
if (ERROR_SUCCESS == RegSetValueEx(hKey, name, 0, REG_SZ, (CONST BYTE*)wstrReadRes.c_str(), len + 1)) {
RegCloseKey(hKey);
return true;
}
}
RegCloseKey(hKey);
return false;
}
bool CRegedit::ReadRegValueW(HKEY root, LPCWSTR regPath, LPCWSTR name, wstring& strReadRes, DWORD dwAccess)
{
HKEY hKey;
WCHAR szLocation[MAX_PATH] = { 0 };
DWORD dwSize = sizeof(DWORD);
DWORD dwType = REG_SZ;
LONG ret; ret = RegOpenKeyEx(root, regPath, 0, dwAccess, &hKey);
if (ret == ERROR_SUCCESS) {
RegQueryValueEx(hKey, name, 0, &dwType, NULL, &dwSize);
ret = RegQueryValueEx(hKey, name, 0, &dwType, (LPBYTE)&szLocation, &dwSize);
if (ret == ERROR_SUCCESS) {
strReadRes = std::wstring(szLocation);
RegCloseKey(hKey);
return true;
}
}
RegCloseKey(hKey);
return false;
}
bool CRegedit::ReadRegValue(HKEY root, LPCSTR regPath, LPCSTR name, string& strReadRes, DWORD dwAccess)
{
HKEY hKey;
WCHAR szLocation[MAX_PATH] = { 0 };
DWORD dwSize = sizeof(DWORD);
DWORD dwType = REG_SZ;
LONG ret; ret = RegOpenKeyExA(root, regPath, 0, dwAccess, &hKey);
if (ret == ERROR_SUCCESS) {
RegQueryValueExA(hKey, name, 0, &dwType, NULL, &dwSize);
ret = RegQueryValueExA(hKey, name, 0, &dwType, (LPBYTE)&szLocation, &dwSize);
if (ret == ERROR_SUCCESS) {
strReadRes = WStringToString(szLocation);
RegCloseKey(hKey);
return true;
}
}
RegCloseKey(hKey);
return false;
}
strReadRes = std::wstring(szLocation);
strReadRes = WStringToString(szLocation);建议 写的时候UNICODE 转换成UTF8, 读的时候UTF8转到UNICODE