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

17 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
Run Code Online (Sandbox Code Playgroud)

这是源代码

#include<Windows.h>

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

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

    return(0);
}
Run Code Online (Sandbox Code Playgroud)

请帮忙

感谢致敬

cup*_*cup 12

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


Jas*_*nov 8

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

将项目 - >属性 - >常规 - >字符集选项设置为使用多字节字符集

我在这里找到了/sf/answers/2310101811/

  • 在 Visual Studio 2019 中,现在映射到:项目 -&gt; 属性 -&gt; 高级 -&gt; 字符 -&gt; 使用多字节字符集 (4认同)
  • 非常有用的答案! (2认同)

mkc*_*ler 6

我最近遇到了这个问题并做了一些研究,并认为我应该记录我在这里发现的一些内容。

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

因此,如果您要使用 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);
}
Run Code Online (Sandbox Code Playgroud)

完整文档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);
}
Run Code Online (Sandbox Code Playgroud)

_T()宏正在使字符串“字符集中性”。_UNICODE您可以使用它通过在构建之前定义符号来将所有字符串设置为 Unicode (文档)。

希望这些信息能够帮助您和遇到此问题的其他人。