I recently ran in to this issue and did some research and thought I would document some of what I found here.
To start, when calling MessageBox(...)
, you are really just calling a macro (for backwards compatibility reasons) that is calling either MessageBoxA(...)
for ANSI encoding or MessageBoxW(...)
for Unicode encoding.
So if you are going to pass in an ANSI string with the default compiler setup in Visual Studio, you can call MessageBoxA(...)
instead:
#include<Windows.h>
int _stdcall WinMain(HINSTANCE hinstance,HINSTANCE hPrevinstance,LPSTR lpszCmdline,int nCmdShow)
{
MessageBoxA(0,"Hello","Title",0);
return(0);
}
Full documentation for MessageBox(...)
is located here: https://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx
And to expand on what @cup said in their answer, you could use the _T()
macro and continue to use MessageBox()
:
#include<tchar.h>
#include<Windows.h>
int _stdcall WinMain(HINSTANCE hinstance,HINSTANCE hPrevinstance,LPSTR lpszCmdline,int nCmdShow)
{
MessageBox(0,_T("Hello"),_T("Title"),0);
return(0);
}
The _T()
macro is making the string "character set neutral". You could use this to setup all strings as Unicode by defining the symbol _UNICODE
before you build (documentation).
Hope this information will help you and anyone else encountering this issue.