无法连接Hello World!

3

这是从一本书(《Programming Windows 5th edition》)中复制的代码:

#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0) ;

     return 0 ;
}

链接到推荐这本书的主题。 无法在VS2010中编译它。我做错了什么?

Error   1   error LNK2001: unresolved external symbol _WinMainCRTStartup

谢谢。

“无法编译”不是问题的有意义描述。你是指什么“无法”?无法启动VS2010吗?无法创建项目?是否遇到错误消息?我们怎么能知道你做错了什么? - AnT stands with Russia
1
你是如何设置你的环境的?你打印“Hello, Windows 98!”这一事实让我担忧...你可能正在使用过时的资源。 - Pops
1
@AndreyT 在我的帖子中出现了一个错误消息 LNK2001。 - There is nothing we can do
1
@Lasse编程Windows第5版,就像我在帖子中指定的那样。 - There is nothing we can do
2
从技术角度来说,你的编译是没有问题的。然而,你在链接方面出现了错误。编译和链接是不同的步骤。编译错误意味着你的代码有问题。链接错误意味着你使用的库有问题。 - abelenky
显示剩余2条评论
3个回答

5
这将取决于您如何设置项目。在VS2010中,如果我通过文件->新建->项目、Visual C++、空项目创建一个新项目,然后添加一个新的C++文件,并复制您的代码,它就可以编译和运行得很好。
如果您创建了不同类型的项目,它可能使用不同的链接库。尝试在解决方案资源管理器中右键单击您的项目,转到属性->链接器->系统,并将子系统设置为“Windows (/SUBSYSTEM:WINDOWS)”。
Win32 API已经过时,但大多数情况下仍可用于进行本机Windows编程。Windows已经做了大量的工作,以确保只要您遵循文档,旧的API就不会改变。您仍然可以编译1992年的16位Windows 3.1代码并在32位Windows 7上运行它。
编辑: 还有可能是在属性->C/C++->高级中,您将忽略默认库名称设置为“Yes”,您可能希望将其设置为“No”。
或者也可以在属性->链接器->输入->忽略默认库中将其设置为否。

@了解:您能描述一下创建新项目的过程吗? - Eclipse
@知道:你尝试按照Eclipse建议创建一个新项目了吗? - Bill
@Eclipse:因为你在回答这个问题时使用了Eclipse这个名字(对于那些没有幽默感的人,是的,我确实发现这个答案有用),所以给你点赞。 - Pops
我通过选择“新建->项目”,并从模板中选择Win32项目来创建项目。然后在下一步中,我选择空项目。之后,我添加新的C++文件并粘贴此代码。 - There is nothing we can do
好的,也许从另一个角度来看:有人能推荐一本关于这个主题的好书吗? - There is nothing we can do
显示剩余3条评论

2

您需要设置项目的链接器设置,以创建Windows GUI程序而不是控制台程序:

  • “链接器/系统/子系统”应设置为“Windows (/SUBSYSTEM:WINDOWS)”

通常情况下,在创建项目并选择Windows GUI应用程序模板时,此设置会正确设置。不幸的是,如果项目设置为不正确的应用程序类型,则该设置有点深藏不露(我花了一些时间才找到它)。


0
确保你已经将源文件添加到项目中。这对我有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接