2010-04-27 111 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

確保您已經將源文件實際添加到項目中。這對我有效。