d d*_*d d 3 c++ registry winapi windows-ce
我在下面的代码中使用 RegSetValueEX ,它将值设置为难以理解的字符(看起来像中文)。我猜测整个美丽的编码世界有些什么?
HKEY regKey;
std::string newIP = "192.168.1.2";
Result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("Comm\\VMINI1\\Parms\\TcpIp"), 0, 0, ®Key);
if (Result == ERROR_SUCCESS)
{
Result = RegSetValueEx(regKey, TEXT("IPAddress"), 0, REG_SZ, (const BYTE*)newIP.c_str(), newIP.size() + 1);
if (Result == ERROR_SUCCESS)
{
std::cout << "Done!";
}
}
Run Code Online (Sandbox Code Playgroud)
然而,当我查看注册表项时,IP 地址并未设置为提供的值,而是随机字符。可能是什么问题呢?
std::stringchar仅使用。大多数 Win32 API 函数(包括RegOpenKeyEx()和RegSetValueEx())都使用TCHAR(从您对TEXT()宏的使用中可以看出)。 TCHAR映射到 或char,wchar_t并RegSetValueEx()映射到RegSetValueExA()(Ansi) 或RegSetValueExW()(Unicode),具体取决于应用程序是否针对 Unicode 进行编译。
就您而言,我怀疑该应用程序正在针对 Unicode 进行编译,因此您的数据与RegSetValueEx()预期不匹配。
由于您正在处理char数据,因此您应该将代码更改为RegSetValueExA()直接调用,这样就不会出现不匹配的情况:
std::string newIP = "192.168.1.2";
Result = RegSetValueExA(regKey, "IPAddress", 0, REG_SZ, (const BYTE*)newIP.c_str(), newIP.length() + 1);
Run Code Online (Sandbox Code Playgroud)
否则,请更改您的代码以使用std::wstringandRegSetValueExW()代替:
std::wstring newIP = L"192.168.1.2";
Result = RegSetValueExW(regKey, L"IPAddress", 0, REG_SZ, (const BYTE*)newIP.c_str(), (newIP.length() + 1) * sizeof(wchar_t));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8079 次 |
| 最近记录: |