0
我需要存儲註冊表中的地圖值。我有這樣的代碼:如何更正地圖中的商店LPTSTR
map<int, LPTSTR> mymap;
for (i = 0, retCode = ERROR_SUCCESS; i<cValues; i++)
{
cchValue = MAX_VALUE_NAME;
achValue[0] = '\0';
retCode = RegEnumValue(hKey, i,
achValue,
&cchValue,
NULL,
NULL,
NULL,
NULL);
if (retCode == ERROR_SUCCESS)
{
DWORD lpData = cbMaxValueData;
buffer[0] = '\0';
LONG dwRes = RegQueryValueEx(hKey, achValue, 0, NULL, buffer, &lpData);
LPTSTR val = (TCHAR*)buffer;
MessageBox(NULL, val, L"VALUE", MB_OK);
auto r = mymap.insert(pair<int, LPTSTR>(i, val));
for (map<int, LPTSTR>::const_iterator it = mymap.begin(); it != mymap.end(); it++)
{
wchar_t szMessage2[1300];
if (SUCCEEDED(StringCchPrintf(szMessage2, ARRAYSIZE(szMessage2), L"+ %d : %s\n", it->first, it->second)))
{
MessageBox(NULL, szMessage2, L"MAP", MB_OK);
}
}
}
}
如何更正將val保存到地圖?現在所有的鍵都有相同的值(最新)。
是'地圖 mymap;'或'map mymap;'取決於是否定義了UNICODE。 –
'LPTSTR'是一個指針。它指向'buffer'的開始。由於您不斷重複使用相同的緩衝區以便將來插入,因此只需重複插入相同的指針,該指針指向包含放置在其中的最後一個值的緩衝區。 –
鑑於您將寬字符串傳遞給'MessageBox',請刪除'TCHAR'並使用寬字符串。 'TCHAR'的兼容性對於新代碼來說並沒有多少用處,而且如果你的代碼用寬字符串編譯,你顯然不需要它。代碼中的所有'TCHAR'內容僅用於混淆它,並且沒有任何好處,因爲未定義'UNICODE'會導致編譯錯誤。 – chris