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)
要在Visual C++中编译代码,您需要使用Multi-Byte char WinAPI函数而不是Wide char函数.
将项目 - >属性 - >常规 - >字符集选项设置为使用多字节字符集
我在这里找到了/sf/answers/2310101811/
我最近遇到了这个问题并做了一些研究,并认为我应该记录我在这里发现的一些内容。
首先,当调用 时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 (文档)。
希望这些信息能够帮助您和遇到此问题的其他人。
归档时间: |
|
查看次数: |
36872 次 |
最近记录: |