Hola tengo una duda estuve haciendo unas modificaciones porque quería simplemente una regla usando qt y como compilador visual studio 2013.. normalmente estaba acostumbrado hacer esto:
string subclave="Hello";
string valor="Anyone";
LPCTSTR _subclave = TEXT("");
LPCTSTR _valor = TEXT("");
long crear = RegSetValueEx(key, _subclave, 0, REG_SZ, (LPBYTE) _valor, strlen(_valor) * sizeof(char));
Pero me daba los siguientes errores:
(https://i.stack.imgur.com/JDfOz.png)
Entonces hice los cambias que me pedia:
string hola="hola";
std::wstring stemp = std::wstring(hola.begin(), hola.end());
LPCWSTR subclave = stemp.c_str();
const char * valor = "hola";
long crear = RegSetValueEx(key, subclave, 0, REG_SZ, (LPBYTE) valor, strlen(valor) * sizeof(char));
Pero me escribe la regla en chino y no se como solucionarlo
(https://i.stack.imgur.com/3nCV6.png)
Perdona que responda así, pero me tengo que ir y no quería dejar esto:
https://github.com/ivancea/Varios/blob/master/C%2B%2B/reg.h (https://github.com/ivancea/Varios/blob/master/C%2B%2B/reg.h)
Échale u ojo a cómo lo llamo ahí. *Creo que funcionaba correctamente*. Luego cuando esté si no te funcionó así, lo pruebo.
EDITO: Ya lo probé, y bien. Ese RegSetValueEx, en mi caso, llama a RegSetValueAxA (la versión ANSI). También podrías llamar explícitamente a RegSetValueKeyExW usando wstring.
#include <windows.h>
#include <iostream>
void regAdd(HKEY type, std::string ruta, std::string valor, std::string data){
HKEY key;
RegCreateKey(type,ruta.c_str(),&key);
RegSetValueExA(key, valor.c_str(), 0, REG_SZ, (const BYTE*)data.c_str(),data.size());
RegCloseKey(key);
}
int main(){
regAdd(HKEY_CURRENT_USER, "Test", "prueba", "datos");
}
Y con respecto al error que tienes tú:
En el primer código que pusiste, no puedes llamar a strlen con de TCHAR*. Yo de ti prescindiría de los LPCTSTR y pasaría directamente los valores de las string. Y bueno, en vez de strlen, valor.size().
Tienes razon lo crea perfectamente hice lo siguiente como me dijistes y funciona correctamente:
#include <windows.h>
#include <iostream>
string valor = "prueba";
string data = "prueba";
long crear = RegSetValueExA(key, valor.c_str(), 0, REG_SZ, (const BYTE*)data.c_str(),data.size());
Gracias.