Я погуглил это в течение 2 часов, и я не могу найти ответ на свою проблему: мне нужно получить реестр REG_SZ
оценить и передать его char*
,
char host_val[1024];
DWORD hostVal_size = 1024;
char* hostName;
DWORD dwType = REG_SZ;
RegOpenKeyEx(//no problem here);
if( RegQueryValueEx( hKey, TEXT("HostName"), 0, &dwType, (LPBYTE)&host_val, &hostVal_size ) == ERROR_SUCCESS )
{
//hostName = host_val;
}
Как мне сделать это преобразование hostName = host_val
?
Если вы компилируете с помощью Unicode, вы копируете строку Unicode (которая, возможно, НЕ заканчивается) в узкий буфер символов. первый символ в строке Unicode будет 0x3100 (учитывая порядковый номер на вашем компьютере, который, скорее всего, является прямым порядком байтов, и тот факт, что вы сказали, что IP-адрес 192 ….)
Это значение, вставленное в массив char [], будет возвращено как строка с одинарным символом и нулем в конце. У вас есть два варианта.
По понятным причинам я бы выбрал первый из этих двух вариантов.
Результирующий host_val
это возможно, строка с нулевым символом в конце (см. «Замечания»), поэтому вы должны скопировать его во вновь выделенную строку с memcpy
и убедитесь, что он завершен нулем:
hostName = new char[hostVal_size + 1];
// host_val may or may not be null-terminated
memcpy(hostName, host_val, hostVal_size);
hostName[hostVal_size] = '\0';
Вам нужно будет delete[]
hostName
потом.
используйте версию функции ANSI
RegQueryValueExA
Таким образом, вам не нужно конвертировать.