l'argument de type const char* est incompatible avec le paramètre de type "LPCWSTR"
j'essaie de faire une simple boîte de Message en C dans Visual Studio 2012, mais je reçois les messages d'erreur suivant
argument of type const char* is incompatible with parameter of type "LPCWSTR"
err LNK2019:unresolved external symbol_main referenced in function_tmainCRTStartup
Voici le code source
#include<Windows.h>
int _stdcall WinMain(HINSTANCE hinstance,HINSTANCE hPrevinstance,LPSTR lpszCmdline,int nCmdShow)
{
MessageBox(0,"Hello","Title",0);
return(0);
}
S'Il Vous Plaît Aider
Merci et cordialement
3 réponses
pour faire compiler votre code dans les deux modes, enfermez les chaînes dans _T () et utilisez les équivalents TCHAR
#include <tchar.h>
#include <windows.h>
int WINAPI _tWinMain(HINSTANCE hinstance, HINSTANCE hPrevinstance, LPTSTR lpszCmdLine, int nCmdShow)
{
MessageBox(0,_T("Hello"),_T("Title"),0);
return 0;
}
pour compiler votre code dans Visual C++ , vous devez utiliser des fonctions char WinAPI Multi-octets plutôt que des fonctions char larges.
Projet -> Propriétés -> Général -> Jeu de Caractères de l'option à Utiliser Multi-Byte Character Set
je l'ai trouvé ici https://stackoverflow.com/a/33001454/5646315
j'ai récemment rencontré à cette question et fait quelques recherches et je pensais m'document de certains de ce que j'ai trouvé ici.
Pour commencer, lors de l'appel de MessageBox(...)
, vous appelez juste une macro (pour des raisons de rétrocompatibilité) qui appelle soit MessageBoxA(...)
pour encodage ANSI ou MessageBoxW(...)
pour encodage Unicode.
donc si vous allez passer dans une chaîne ANSI avec la configuration par défaut du compilateur dans Visual Studio, vous pouvez appeler MessageBoxA(...)
plutôt:
#include<Windows.h>
int _stdcall WinMain(HINSTANCE hinstance,HINSTANCE hPrevinstance,LPSTR lpszCmdline,int nCmdShow)
{
MessageBoxA(0,"Hello","Title",0);
return(0);
}
documentation complète pour MessageBox(...)
est situé ici: https://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs. 85).aspx
et pour développer ce que @cup a dit dans sa réponse, vous pouvez utiliser le _T()
macro et continuer à utiliser 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);
}
_T()
macro rend la chaîne "character set neutral". Vous pouvez utiliser ceci pour configurer toutes les chaînes en Unicode en définissant le symbole _UNICODE
avant de créer (documentation).
Espérons que cette information vous aidera, vous et personne d'autre rencontre ce problème.