source

type constchar* 인수가 type "LPCWSTR" 매개 변수와 호환되지 않습니다.

ittop 2023. 10. 4. 22:59
반응형

type constchar* 인수가 type "LPCWSTR" 매개 변수와 호환되지 않습니다.

Visual Studio 2012의 C에서 간단한 메시지 상자를 만들려고 하는데 다음과 같은 오류 메시지가 나타납니다.

argument of type const char* is incompatible with parameter of type "LPCWSTR"

err LNK2019:unresolved external symbol_main referenced in function_tmainCRTStartup

여기 소스코드가 있습니다.

#include<Windows.h>

int _stdcall WinMain(HINSTANCE hinstance,HINSTANCE hPrevinstance,LPSTR lpszCmdline,int nCmdShow)
{

    MessageBox(0,"Hello","Title",0);

    return(0);
}

제발 도와주세요.

감사하고 안부 전합니다

Visual C++에서 코드를 컴파일하려면 Wide char 대신 Multi-Byte char WinAPI 함수를 사용해야 합니다.

프로젝트 설정 -> 속성 -> 일반 -> 멀티바이트 문자 집합을 사용하는 문자 집합 옵션

여기 https://stackoverflow.com/a/33001454/5646315 에서 찾았습니다.

두 모드 모두에서 코드를 컴파일하려면 문자열을 _T()로 묶고 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;
}

저는 최근 이 문제를 접하고 조사를 좀 했고 여기서 발견한 것 중 일부를 문서화하려고 생각했습니다.

시작하려면, 호출할 때MessageBox(...), 당신은 정말로 (역호환성의 이유로) 매크로를 호출하는 것입니다. 둘 중 하나를 호출하고 있습니다.MessageBoxA(...)ANSI 인코딩 또는MessageBoxW(...)유니코드 인코딩의 경우.

그래서 Visual Studio에서 기본 컴파일러 설정으로 ANSI 문자열을 전달하려면 다음을 호출할 수 있습니다.MessageBoxA(...)대신:

#include<Windows.h>

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<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가 문자열을 "문자 집합"으로 만들고 있습니다.기호를 정의하여 모든 문자열을 유니코드로 설정할 수 있습니다._UNICODEdocument을 구축하기 전에.

이 정보가 귀하와 이 문제에 직면한 다른 사람들에게 도움이 되기를 바랍니다.

네, 잘못된 튜토리얼이었든 간에 긴 바이트 정수로 만들어야 합니다.

시도해 보기:

#include<Windows.h>
int _stdcall WinMain(HINSTANCE hinstance,HINSTANCE hPrevinstance,LPSTR lpszCmdline,int nCmdShow)
{
    MessageBox(0,L"Hello",L"Title",0);
    return(0);
}

언급URL : https://stackoverflow.com/questions/21834833/argument-of-type-const-char-is-incompatible-with-parameter-of-type-lpcwstr

반응형