【发布时间】:2014-02-17 16:53:11
【问题描述】:
我正在尝试在 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);
}
请帮忙
感谢和问候
【问题讨论】:
-
检查项目的字符集设置(项目属性、配置属性、常规、字符集)。它可能设置为“使用 Unicode”而不是“使用多字节”。
-
您在 Unicode 操作系统上运行您的代码。您应该使用 Unicode 字符串。比如L“你好”。您可以将时钟拨回到 1991 年,但如果这样做,使用 C 语言就没有多大意义了。
-
@HansPassant 或切换到多字节。 Windows API 是designed to allow you use either/or。请注意,“多字节”字符串仍然可以编码 Unicode 代码点,因此选择此选项不一定是“将时钟拨回 1991 年”。可以使用多字节(而不是宽字符)字符串编写完全正确、全球化、支持 Unicode 的应用程序。
-
不,winapi 旨在支持旧项目,即上个世纪开始的项目。创建一个新的并有意通过强制兼容性函数转换字符串来使代码变慢是没有意义的。还不如使用脚本语言。
-
@HansPassant 不。世界运行在 UTF8 上,使用它作为您的内部表示以便与世界轻松兼容,或者如果您需要严格的字符级文本处理,也可以使用 UCS4。上千年的半轴 16 位编码是一个有趣的好奇心,应该留在古代计算博物馆。 Windows 操作系统对这种编码的内部依赖是一个错误,而不是一个特性。微不足道的速度提升并不是承认您自己的代码存在此类错误的正当理由。
标签: c