2010-04-27 76 views
3

家伙是代码从一本书(Windows程序设计第五版)复制:无法链接Hello World!

#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 ; 
} 

Link在其中推荐这本书的主题。 无法用VS2010进行编译。我究竟做错了什么?

Error 1 error LNK2001: unresolved external symbol _WinMainCRTStartup 

谢谢。

+0

“无法编译”不是对问题的有意义的描述。你是什​​么“不能”?无法启动VS2010?无法创建项目?获取错误消息? *我们*应该怎么知道你*做错了什么? – AnT 2010-04-27 18:57:37

+1

你做了什么来设置你的环境?你打印的事实是“你好,Windows 98!”担心我......你可能会使用过时的资源。 – Pops 2010-04-27 18:58:30

+1

@AndreyT在我的文章中有一个错误信息LNK2001 – 2010-04-27 19:00:34

回答

5

这将取决于您如何设置项目。在VS2010中,如果我通过File-> New-> Project,Visual C++,Empty Project创建一个新项目,然后添加一个新的C++文件,并复制代码,它会编译并运行得很好。

如果您创建了不同类型的项目,则可能使用不同的链接库。尝试在解决方案资源管理器中右键单击您的项目,进入属性 - >连接器 - >系统,并将子系统设置为“Windows(/ SUBSYSTEM:WINDOWS)

Win32 API是旧的,但大部分是完美的如果你想做本地Windows编程,那么Windows可以使用,Windows已经做了大量的工作来确保只要你遵循了文档,旧的API就不会改变,你仍然可以从1992年开始编译16位的Windows 3.1代码,在32位Windows 7上运行它。

编辑: 它也可能是在属性 - > C/C++ - >高级,你忽略默认库名称设置为“是”,你可能希望它设置为“否”

也或者属性 - >连接器 - >输入 - >忽略默认利布斯应设置为第

+0

我按照你的建议设定了它,但仍然没有。 – 2010-04-27 19:14:10

+0

@Knowing:你能描述一下你创建一个新项目的过程吗? – Eclipse 2010-04-27 19:23:40

+0

@Know:你有没有尝试创建一个像Eclipse这样的新项目? – Bill 2010-04-27 19:25:10

2

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

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

通常此设置才能正确,当你创建项目设置,然后选择一个Windows GUI应用程序模板。不幸的是,如果项目设置为不正确的应用程序类型,该设置有点埋没(我花了一些时间来挖掘它)。

0

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