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

12
c
demandé sur Adam Rosenfield 2014-02-17 20:53:11

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;
}
10
répondu cup 2014-02-17 18:54:29

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

5
répondu Jasurbek Nabijonov 2017-07-06 07:46:01

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.

4
répondu mkchandler 2016-11-15 22:51:01