convert std :: string para const BYTE * para RegSetValueEx ()

Eu tenho uma função que recebe uma std :: string. Essa função chama

RegSetValueEx

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?

questionAnswers(4)

yourAnswerToTheQuestion