аргумент типа const char * несовместим с параметром типа “LPCWSTR”

Я пытаюсь сделать простой Message Box в C в Visual Studio 2012, но я получаю следующие сообщения об ошибках

argument of type const char* is incompatible with parameter of type "LPCWSTR" err LNK2019:unresolved external symbol_main referenced in function_tmainCRTStartup 

Вот исходный код

 #include int _stdcall WinMain(HINSTANCE hinstance,HINSTANCE hPrevinstance,LPSTR lpszCmdline,int nCmdShow) { MessageBox(0,"Hello","Title",0); return(0); } 

Пожалуйста помоги

Спасибо и с уважением

Чтобы скомпилировать ваш код в обоих режимах, вставьте строки в _T () и используйте эквиваленты TCHAR

 #include  #include  int WINAPI _tWinMain(HINSTANCE hinstance, HINSTANCE hPrevinstance, LPTSTR lpszCmdLine, int nCmdShow) { MessageBox(0,_T("Hello"),_T("Title"),0); return 0; } 

Чтобы скомпилировать ваш код в Visual C ++, вам нужно использовать функции Multi-Byte char WinAPI вместо Wide char.

Set Project -> Properties -> General -> Character Set для использования многобайтового набора символов

Я нашел его здесь https://stackoverflow.com/a/33001454/5646315

Недавно я столкнулся с этой проблемой и сделал некоторые исследования и подумал, что я буду документировать некоторые из того, что я нашел здесь.

Для начала при вызове MessageBox(...) вы действительно просто вызываете макрос (для соображений обратной совместимости), который вызывает либо MessageBoxA(...) для кодировки ANSI, либо MessageBoxW(...) для кодировки Unicode.

Поэтому, если вы собираетесь передать строку ANSI с настройкой компилятора по умолчанию в Visual Studio, вы можете вместо этого вызвать MessageBoxA(...) :

 #include int _stdcall WinMain(HINSTANCE hinstance,HINSTANCE hPrevinstance,LPSTR lpszCmdline,int nCmdShow) { MessageBoxA(0,"Hello","Title",0); return(0); } 

Полная документация для MessageBox(...) находится здесь: https://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx

И чтобы расширить то, что сказал @cup в своем ответе, вы можете использовать _T() и продолжать использовать MessageBox() :

 #include #include int _stdcall WinMain(HINSTANCE hinstance,HINSTANCE hPrevinstance,LPSTR lpszCmdline,int nCmdShow) { MessageBox(0,_T("Hello"),_T("Title"),0); return(0); } 

_T() делает строку «набор символов нейтральной». Вы можете использовать это, чтобы настроить все строки как Unicode, _UNICODE символ _UNICODE перед созданием ( документацией ).

Надеюсь, эта информация поможет вам и всем, кто сталкивается с этой проблемой.