Из спецификации (раздел 7.20.3)
Его значение, определяемое реализацией, должно быть равным или больше по величине (абсолютное значение) чем соответствующее значение, указанное ниже
blockquote>[Emphasis mine]
Таким образом, упомянутые значения являются только минимальными значениями. Реализация может иметь большие ограничения. Я ожидал бы, что
ptrdiff_t
будет длиной слова целевой платформы (то есть 64-битного типа 64-битных систем).И обратите внимание, что
size_t
является целым типом без знака , аptrdiff_t
является целым типом со знаком . Этот тип подразумевает, что не все значенияsize_t
могут быть представленыptrdiff_t
.
Значение по умолчанию для новых проектов в VS2008 должно создать UNICODE осведомленные приложения. Можно или изменить то значение по умолчанию и вернуться к использованию ANSI или приложений MBCS (Свойства-> Свойства Конфигурации-> Общий-> Набор символов), или использовать Строки Unicode как это:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, L"Hello", L"Note", MB_OK);
return 0;
}
Не бросайте свои строки к LPCWSTR, потому что это приведет к неопределенному поведению! Символ не является тем же как wchar_t!
Проблема состоит в том, что Вы создаете для UNICODE и передаете строки не-Unicode.
Попытка:
MessageBox(NULL, L"Hello", L"Note", MB_OK);
или настроенный Ваша сборка для ANSI/MBCS или изучает использование TCHARs (которые являются болью).
Мои памяти Win32 C программирование являются туманными, но поскольку я вспоминаю, необходимо запустить путем обертывания строковых литералов в этот макрос:
_T ("mystring")
При создании unicode это будет преобразовано в строку unicode.
Если Вы только создаете unicode, или Вы уверены, что только обрабатываете конкретную строку в unicode, можно использовать L"" маркер, который является тем, что _T макрос делает под покрытиями.
Вы, возможно, должны включать tchar.h заголовок.
При выполнении win32 программирования, я обычно объявляю строки как TCHAR * szWhatever так, чтобы вещи работали над Win9x почти, а также NT/Win2k/XP. (Существуют другие макросы удобства там также, такие как LPTSTR и так далее, и MFC содержит некоторые легкие макросы преобразования для случаев, когда на самом деле необходимо преобразовать между ansi и unicode для вызова определенных API).
Как другие сказанные сообщения, Вы создаете приложение Unicode. Можно переключиться на, и из проекта Unicode в настройках проекта (не забывайте устанавливать его и для конфигураций "Отладки" и для "Выпуска".
Если Вы хотите использовать его, необходимо будет предварительно ожидать все статические строки с L:
L"Some static string"
Для символа [] строки там являются методом mbstowcs_s, который используется примерно как это:
std::string str; // the string you want to convert
WCHAR wstr[128];
size_t convertedChars = sizeof(wstr)/sizeof(WCHAR);
mbstowcs_s(&convertedChars, wstr, str.c_str(), _TRUNCATE);
Это - то, как я использовал его в одном из моих проектов. Поскольку точное использование обращается к MSDN.