2

レジストリからデータをクエリしていて、LPBYTEとして出力されていますが、これが行き詰まっています。LPBYTEを、文字列などの操作可能なタイプのデータに変換する必要があります。

これはこれまでの私のコードです

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;

ヘルプやコード例は大歓迎です。

4

1 に答える 1

3

であると宣言する必要がありlpValueますchar*

char* lpValue;

次に、を呼び出して割り当てますnew

lpValue = new char[dwSize+1];

レジストリデータの形式が正しくなく、ヌルターミネータがない場合に備えて、追加の要素を割り当てます。それは起こり得ることです。次に、最後の要素を次のように設定し\0ます。

lpValue[dwSize] = '\0';

次に、値を取得します。

LONG getReg = RegQueryValueExA(..., (LPBYTE)&dwValue, ...);

を使用して割り当てを解除しdelete[]ます。

delete[] lpValue;
于 2012-12-22T22:21:29.337 に答える