Я запрашиваю данные из реестра, и они выводятся как LPBYTE, и вот где я застрял. Мне нужно преобразовать LPBYTE в тип данных, которыми я могу манипулировать, например, String.
Это мой код до сих пор
HKEY hk;
string poolID;
DWORD dwSize = 0;
DWORD dwDataType = 0;
DWORD dwValue;
LPBYTE lpValue = NULL;
CA2W registryLocation("Software\\Example");
// Check registry if exists, otherwise create.
LONG openReg = RegOpenKeyEx(HKEY_CURRENT_USER, registryLocation, 0, KEY_QUERY_VALUE, &hk);
if (openReg==ERROR_SUCCESS) { } else { cout << "Error (Could not open/create Registry Location)\n"; }
// Get buffer size
LONG getRegBuf = RegQueryValueExA(hk, "", 0, &dwDataType, lpValue, &dwSize);
if (getRegBuf==ERROR_SUCCESS) { cout << "Got reg key buf size\n"; } else { cout << "Error (registry key does not exist)/n"; intro(); }
lpValue = (LPBYTE)malloc(dwSize);
// Open reg value
LONG getReg = RegQueryValueExA(hk, "", 0, &dwDataType, (LPBYTE)&dwValue, &dwSize);
if (getReg==ERROR_SUCCESS) { cout << "Successful\n"; } else { cout << "Error\n"; }
cout << dwValue;
Любая помощь или примеры кода будут высоко ценится.
Вы должны объявить lpValue
быть char*
,
char* lpValue;
Затем выделите его с призывом new
,
lpValue = new char[dwSize+1];
Выделите дополнительный элемент в случае, если данные реестра неверно сформированы и отсутствует нулевой терминатор. Это то, что может случиться. Затем установите последний элемент \0
:
lpValue[dwSize] = '\0';
Тогда получите значение:
LONG getReg = RegQueryValueExA(..., (LPBYTE)&dwValue, ...);
Распределить используя delete[]
:
delete[] lpValue;
Других решений пока нет …