convert std :: string para const BYTE * para RegSetValueEx ()
Eu tenho uma função que recebe uma std :: string. Essa função chama
o quinto parâmetro é o valor do valor do registro e espera uma variável do tipo const BYTE *. Então, eu tenho que converter o std :: string em const BYTE * e também fornecer o comprimento da matriz resultante como o sexto parâmetr
Eu encontrei uma maneira de fazer isso, mas parece feio e eu realmente não entendo o que está acontecendo. Aqui está uma versão reduzida dessa função:
void function(const std::string& newValue)
{
HKEY keyHandle;
if(RegOpenKeyEx(HKEY_CLASSES_ROOT, TEXT("some key"),0,KEY_ALL_ACCESS,&keyHandle) == ERROR_SUCCESS)
{
std::wstring wNewValue;
wNewValue.assign(newValue.begin(),newValue.end());
if (RegSetValueEx(keyHandle, TEXT("some value"), NULL, REG_SZ, (const BYTE*)(LPCTSTR)(wNewValue.c_str()), wNewValue.size()*2)==ERROR_SUCCESS)
{
//do something
}
RegCloseKey(keyHandle);
}
}
Como você pode ver, primeiro faço uma string larga (UNICODE é definido), depois uso uma conversão dupla e, pelo comprimento que tenho que fazer * 2, caso contrário, ele definirá apenas metade da string de entrad
Esta forma de elenco é a melhor / normal maneira de fazer isso?
Por que o * 2, qual seria a maneira melhor?