2010-04-07 156 views
4

那麼,我有一個簡單的問題,至少我希望它很簡單。我對win32控制檯感興趣一段時間。我們的老師告訴我們,Windows控制檯僅用於DOS和實模式仿真目的。那麼,我知道這是不正確的,因爲DOS應用程序是由仿真程序運行,它只使用控制檯來顯示輸出。我學到的另一件事是控制檯自NT以來內置於Windows中。好。但是我找不到的是,如何編寫控制檯程序來使用控制檯。我使用Visual C++進行編程(以及學習)。所以,我需要爲使用控制檯做的唯一事情是選擇控制檯項目。我首先想到的是,Windows決定是否在控制檯中運行應用程序,或者試圖在窗口模式下運行應用程序。所以我創建了win32程序並嘗試了printf()。那麼,我無法編譯它。我知道按照定義,printf()將文本或變量輸出到標準輸出。我還發現stdout是輸出的控制檯界面。但是,我找不到實際的stdout。Windows控制檯

所以,基本上我想問的是,控制檯應用程序和win32應用程序的區別在哪裏。當我從「控制檯系列」功能獲得命令時,我認爲Windows開始控制檯。但顯然它不是,所以必須有一些實際命令窗口來創建控制檯界面的代碼。

而第二個問題是,當控制檯創建時,Windows如何識別哪個控制檯終端用於哪個應用程序?我的意思是,實際上stdout是什麼?它是內存中的一個區域,還是稱爲某個窗口例程?謝謝。

回答

2

當您鏈接一個Win32應用程序時,您可以選擇它是Windows還是控制檯。在控制檯情況下,控制檯窗口將自動分配(或者,如果父進程有一個,則重用)。

但是,Windows(即GUI)應用程序也可以顯示控制檯窗口,只需調用AllocConsole API即可。

您測試應用程序可能無法編譯許多原因,錯誤消息應該告訴你是否需要:

  • 包括「stdio.h中」
  • 參考的CRT(C運行時)庫
  • 別的東西。

通常,如果您在Win32項目的新項目嚮導中選擇控制檯應用程序,這些事情應該是正常的,否則您需要選擇正確的編譯和鏈接選項。

+0

謝謝,但我對如何實際連接到控制檯更感興趣。什麼部分代碼,而不是源代碼,但代碼編譯向Windows說我想分配控制檯?謝謝。 – 2010-04-08 15:17:43

0

要回答你的第二個問題,Windows中的stdout映射到由GetStdHandle(STD_OUTPUT_HANDLE)返回的HANDLE,默認情況下它映射到CONOUT$。如果您有這種傾向,您可以致電CreateFile("CONOUT$", ...)進行訪問。