во время выполнения, как я могу узнать, нахожусь ли я на WinXP +? win32 - PullRequest
3 голосов
/ 13 июля 2010

Я делаю некоторые вызовы Win32 API строки и предполагаю, что строки получаются в виде широких строк, что допустимо в XP и новее. Как я могу это утверждать? Это проверка во время выполнения или во время компиляции?

Я делаю это неправильно? Вот пример:

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("");
}

Ответы [ 3 ]

4 голосов
/ 14 июля 2010

Это не проблема.Последние 17 лет Windows была родной операционной системой Unicode, задолго до выпуска XP.Мозгом Дэвида Катлера, NT 3.1, был Unicode с самого первого дня.

В маловероятном случае, когда ваша программа окажется на компьютере с Windows 9x, все еще есть уровень API, который может преобразовывать ваши строки UTF-16 в 8-немного символовНет смысла использовать TCHAR для разработки нового кода.

1 голос
/ 14 июля 2010

Я думаю, что происходит, когда я компилирую, я компилирую с помощью API-интерфейсов Windows Unicode, поэтому, если я запускаю свой исполняемый файл в неширокоугольных окнах, он не запускается. Таким образом, проверка во время выполнения бесполезна.

Я добавил утверждение во время компиляции, чтобы вызвать ошибку сборки, если мы компилируем на платформе не-широкоформатной (до XP, или до 2000, или где бы то ни было), сборка завершится неудачно. Если бы утверждения не было, оно бы все равно провалилось, но более загадочно.

1 голос
/ 13 июля 2010

Я думаю, что эта статья MSDN - то, что вы ищете.Вы хотите знать, в какой версии Windows вы находитесь, и соответствующим образом настроить обработку строк?Если я неправильно понял, пожалуйста, оставьте комментарий, и я исправлю свой ответ.

http://msdn.microsoft.com/en-us/library/ms724429.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...