我正在做一些win32字符串API調用,並假設字符串以寬字符串出現,這在XP和更新的版本中是有效的。我怎麼能斷言這一點?這是運行時檢查還是編譯時檢查?在運行時,我怎麼知道我是否在WinXP +上? win32
我做錯了嗎?這裏有一個例子:
typedef std::basic_string<TCHAR> TString;
inline TString queryRegStringValue(HKEY key, const TString& subkey,
const TString defaultValue = TEXT(""))
{
std::vector<char> out_bytes(256);
DWORD num_bytes = out_bytes.size();
DWORD out_type;
long retval = RegQueryValueEx(key, subkey.c_str(), 0, &out_type,
reinterpret_cast<BYTE*>(&out_bytes[0]), &num_bytes); //comes out as a platform string. wide on XP
if (retval != 0)
return defaultValue;
if (num_bytes > 0)
{
assert(out_type == REG_SZ);
BOOST_STATIC_ASSERT(sizeof(TCHAR)==2); //what if someone runs my code on an older system?
return TString(reinterpret_cast<wchar_t*>(&out_bytes[0]), num_bytes/2); //assumes windows XP (wide string)
}
return TEXT("");
}
我錯過了什麼嗎?根據msdn,RegQueryValueEx已經出現在Win2000中,它也完全支持unicode。 – 2010-07-13 19:41:01