Tengo la mayor parte del código para escribir un valor en el registro de Windows, sin embargo, cuando cambio la ruta a una clave ficticia y el valor que configuré para probando falla. Mi código está a continuación:Escribir valores de cadena (REG_SZ) en el registro en C++
HKEY hKey;
LPCTSTR sk = TEXT("SOFTWARE\TestSoftware");
LONG openRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sk, 0, KEY_ALL_ACCESS , &hKey);
if (openRes==ERROR_SUCCESS) {
printf("Success opening key.");
} else {
printf("Error opening key.");
}
LPCTSTR value = TEXT("TestSoftwareKey");
LPCTSTR data = "TestData\0";
LONG setRes = RegSetValueEx (hKey, value, 0, REG_SZ, (LPBYTE)data, strlen(data)+1);
if (setRes == ERROR_SUCCESS) {
printf("Success writing to Registry.");
} else {
printf("Error writing to Registry.");
}
LONG closeOut = RegCloseKey(hKey);
if (closeOut == ERROR_SUCCESS) {
printf("Success closing key.");
} else {
printf("Error closing key.");
}
Las tres pruebas arrojan estados de error.
La parte que me confunde es que pude ejecutar este código cuando lo señalé en otras partes del registro. ¿Algunas ideas?
gracias, Brian
Tenga en cuenta que la función 'RegSetValueEx' toma la longitud de cadena en bytes (no caracteres) como su último argumento. Por lo tanto, es mejor utilizar 'StringCbLength' en lugar de' strlen'. –