Невозможно преобразовать параметр из ‘const char ‘ в ‘LPCWSTR’
При компиляции этого кода:
#include int WINAPI WinMain(HINSTANCE hInsance,HINSTANCE hPrevInstance,PSTR cmdLine,int showCmd){ MessageBox(0,"First Win32 Program","Window Tittle",MB_OK); }
Я получаю ошибку компилятора:
Ошибка C2664: «MessageBoxW»: невозможно преобразовать параметр 2 из ‘const char [20]’ в ‘LPCWSTR’ 1> Указанные типы не связаны; для преобразования требуется reinterpret_cast, литье в стиле C или функция-стиль
Что я делаю не так?
- Как определить текущее разрешение экрана?
- Как открыть встроенный диалог копирования файлов?
- Как я могу обернуть API-интерфейс FindXFile в шаблон Iterator в стиле STL в C ++?
- Win32Exception Недостаточно памяти для обработки этой команды
- Получить текущую позицию курсора
- #define NOMINMAX с использованием std :: min / max
- Как определить библиотеки DLL, необходимые для приложения?
- Как приложение Metro в Windows 8 взаимодействует с настольным настольным окном на одном компьютере?
У вас определен UNICODE
, поэтому MessageBox
ожидает широкую строку.
По умолчанию UNICODE
определяется в Visual Studio 2010. Либо вызовите MessageBoxA
не используйте MessageBox
определите или передайте широкий строковый литерал ( L «Первая программа Win32» и «Название windows L ») или, если вы действительно заботитесь о возможности создания без определения UNICODE
, используйте макрос _T вокруг ваших строковых литералов: _T («Первая программа Win32») (это то же самое, что L «Первая программа Win32», когда определен UNICODE, но это будет «Первая программа Win32», когда UNICODE
не определен).
Дополнительные сведения об UNICODE
и о том, как это влияет на вызовы API, см. По этой ссылке: http://msdn.microsoft.com/en-us/goglobal/bb688113.aspx . В частности, разделы ниже «Создание приложений Unicode Win32».
С другой стороны: все операционные системы Windows, поддерживаемые Microsoft сегодня, являются родными Unicode. Я бы рекомендовал всегда поддерживать «широкий» API. В этом случае MessageBoxW
– это то, что определяется MessageBox
когда установлен UNICODE
. Дни использования макроса _T и компиляции без определения UNICODE
должны быть позади.
MessageboxW ожидает широкого символа … вы можете внести небольшие изменения в свой код, и ваш код будет отлично работать. Решение первое: – MessageBox (0, L «Первая программа Win32», L «Window Tilt», MB_OK); Решение два. Используйте MessageboxA вместо Messagebox. MessageboxA примет символ в наборе символов ANCI.