Visual C ++ пытается скомпилировать вашу программу с поддержкой Unicode. Под капотом это делается с помощью макросов #define
-ing UNICODE
и _UNICODE
. Это, в свою очередь, заставляет вашу программу использовать Unicode-варианты функций Win32.
Каждая функция Win32 (которая принимает или возвращает строку) имеет два варианта. Например, GetEnvironmentStrings
на самом деле две функции: GetEnvironmentStringsA
и GetEnvironmentStringsW
. GetEnvironmentStrings
разрешается к одному из них в зависимости от того, определен ли макрос UNICODE
.
Итак, ваша программа компилируется для Unicode, и компилятор не может понять, как взять результат (Unicode) GetEnvironmentStringsW
(который является LPWCH
- фактически WCHAR *
) и поместить его в (ANSI) std::string
.
Вы можете сделать одно (или комбинацию) из следующего:
- Конвертируйте всю программу в Unicode (начните использовать
std::wstring
).
- Используйте
GetEnvironmentStringsA
явно.
- Перекомпилируйте для не-Unicode вместо.
- Воспользуйтесь поддержкой
TCHAR
в Windows. Вам нужно определить tstring
тип .
Это не исчерпывающий список.
Re:
Поскольку это приложение скомпилировано в Unicode, означает ли это, что оно будет работать как на компьютерах ANSII, так и на компьютерах UNICODE - поэтому мое приложение сможет работать на международном уровне?
Компьютеры не являются ANSI или Unicode. Операционные системы есть. Последней версией Windows, которая не поддерживала Unicode, была Windows 3.11 для рабочих групп.
Тем не менее, простая компиляция для Unicode не позволяет вашему приложению работать на международном уровне. Это будет хорошо работать, но Unicode охватывает только наборы символов. Вам по-прежнему нужно беспокоиться о переводе, форматах даты и времени, форматах чисел, различных календарях. Интернационализация, локализация и глобализация - это гораздо больше, чем просто поддержка Unicode.