我正在尝试在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);
}
请帮助
谢谢和问候
答案 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;使用多字节字符集的字符集选项
找到了它答案 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);
}