RegSetValueEx me crea la regla en chino?

Iniciado por Borito30, 4 Febrero 2017, 14:47 PM

0 Miembros y 1 Visitante están viendo este tema.

Borito30

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:


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

Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)

ivancea96

#1
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

É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.

Código (cpp) [Seleccionar]
#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().

Borito30

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.
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)