类型为const char *的参数与“LPCWSTR”类型的参数不兼容

时间:2014-02-17 16:53:11

标签: c

我正在尝试在Visual Studio 2012中用C创建一个简单的Message Box,但我得到了 以下错误消息

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);
}

请帮助

谢谢和问候

4 个答案:

答案 0 :(得分:11)

要在两种模式下编译代码,请将字符串括在_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;
}

答案 1 :(得分:8)

要在Visual C ++中编译代码,您需要使用Multi-Byte char WinAPI函数而不是Wide char函数。

设置项目 - &gt;属性 - &gt;一般 - &gt;使用多字节字符集的字符集选项

我在https://stackoverflow.com/a/33001454/5646315

找到了它

答案 2 :(得分:4)

我最近遇到了这个问题并进行了一些研究,并认为我会记录一些我在这里找到的内容。

首先,在调用MessageBox(...)时,您实际上只是调用一个宏(出于向后兼容性原因),为ANSI编码调用MessageBoxA(...)或为Unicode编码调用MessageBoxW(...)。 / p>

因此,如果您要使用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()宏使字符串&#34;字符集保持中立&#34;。通过在构建(documentation)之前定义符号_UNICODE,可以使用此设置将所有字符串设置为Unicode。

希望此信息可以帮助您和其他任何人遇到此问题。

答案 3 :(得分:0)

是的,不管它是一个错误的教程,你需要把它变成一个长字节整数。

试试这个:

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