Estoy intentando crear un cuadro de mensaje simple en C en Visual Studio 2012, pero aparece el siguiente mensaje de error
argument of type const char* is incompatible with parameter of type "LPCWSTR" err LNK2019:unresolved external symbol_main referenced in function_tmainCRTStartup
Aquí está el código fuente
#include int _stdcall WinMain(HINSTANCE hinstance,HINSTANCE hPrevinstance,LPSTR lpszCmdline,int nCmdShow) { MessageBox(0,"Hello","Title",0); return(0); }
Por favor ayuda
Gracias y saludos
Para hacer que su código se compile en ambos modos, incluya las cadenas en _T () y use los equivalentes de TCHAR
#include #include int WINAPI _tWinMain(HINSTANCE hinstance, HINSTANCE hPrevinstance, LPTSTR lpszCmdLine, int nCmdShow) { MessageBox(0,_T("Hello"),_T("Title"),0); return 0; }
Para comstackr su código en Visual C ++ necesita usar las funciones WinAPI de Multi-Byte char en lugar de las de Wide Char.
Establecer proyecto -> Propiedades -> General -> Opción de conjunto de caracteres para usar el conjunto de caracteres de múltiples bytes
Lo encontré aquí https://stackoverflow.com/a/33001454/5646315
Hace poco me encontré con este problema e hice algunas investigaciones y pensé que documentaría algo de lo que encontré aquí.
Para comenzar, cuando llama a MessageBox(...)
, en realidad solo está llamando a una macro (por razones de compatibilidad con versiones anteriores) que llama a MessageBoxA(...)
para la encoding ANSI o MessageBoxW(...)
para la encoding Unicode.
Entonces, si va a pasar una cadena ANSI con la configuración predeterminada del comstackdor en Visual Studio, puede llamar a MessageBoxA(...)
lugar:
#include int _stdcall WinMain(HINSTANCE hinstance,HINSTANCE hPrevinstance,LPSTR lpszCmdline,int nCmdShow) { MessageBoxA(0,"Hello","Title",0); return(0); }
La documentación completa de MessageBox(...)
se encuentra aquí: https://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx
Y para ampliar lo que @cup dijo en su respuesta, podrías usar la macro _T()
y continuar usando MessageBox()
:
#include #include int _stdcall WinMain(HINSTANCE hinstance,HINSTANCE hPrevinstance,LPSTR lpszCmdline,int nCmdShow) { MessageBox(0,_T("Hello"),_T("Title"),0); return(0); }
La macro _T()
está haciendo que la cadena “conjunto de caracteres sea neutral”. Puede usar esto para configurar todas las cadenas como Unicode definiendo el símbolo _UNICODE
antes de comstackr ( documentación ).
Espero que esta información le ayude a usted y a cualquier otra persona que tenga este problema.