convertir std::string const BYTE* pour RegSetValueEx()

J'ai une fonction qui récupère un std::string. Que les appels de fonction

RegSetValueEx

le 5ème paramètre est la valeur de la valeur de registre et s'attend à une variable de type const BYTE*.
Donc, je dois convertir le std::string const BYTE* et aussi donner la longueur de la matrice résultante comme le 6e paramètre.

J'ai trouvé une façon de le faire, mais il se sent moche et je ne comprends pas vraiment ce qui se passe. Ici est une version allégée de cette fonction:

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);
    }
}

Comme vous pouvez le voir, j'ai d'abord faire une grande chaîne de caractères (UNICODE est défini), puis d'utiliser un double jeté, et pour la longueur j'ai à faire *2, sinon il sera seulement mis la moitié de la chaîne d'entrée.

Est cette forme de fonte de la normale, la meilleure façon de le faire?

Pourquoi l' * 2, ce serait une meilleure façon?

Depuis que vous avez utilisé un wstring, vous savez que le sous-jacent est de type wchar_t, et c_str() retournera wchar_t*. Donc pas besoin de cast pour LPCTSTR.

OriginalL'auteur Emile Vrijdags | 2009-05-11