2012-08-27 40 views
2

我正在使用MinGW編寫代碼塊,並且我有一段編碼項目,我一直在努力。我一直使用的項目一直是控制檯應用程序,而我依靠打印到控制檯的調試功能。然而,最近,我試圖實現windows'GetOpenFileName()'函數來打開一個打開的文件框,這樣用戶打開文件就容易多了。但是,在包含頭文件的控制檯應用程序中使用項目時,MinGW編譯器的行爲就像無法找到該函數。然而,我發現改變項目爲win32 GUI允許編譯器找到函數(我不完全理解爲什麼,但那只是我)。顯示控制檯和win32圖形用戶界面

問題是這樣的:我試圖輸出調試信息到控制檯,但當然現在應用程序是win32 GUI,控制檯不顯示,因此我看不到調試信息,我無法切換它回到控制檯應用程序或Windows打開的文件框代碼將不會編譯。我如何顯示控制檯並仍然允許項目正確編譯Windows GUI代碼?

我無法更改調試功能或使用不同的調試功能,因爲它們被寫入所有類以協助回溯錯誤,並且至少有43個文件,其中大多數使用調試功能。

+1

將「」包括在控制檯應用程序中仍然可以工作。如果你絕對需要一個控制檯而不能擁有一個,那麼就有'AllocConsole'。 – chris

+0

我確實包含了「在包含頭文件的控制檯應用程序中使用項目時」 - 除非出於某種奇怪的原因將項目設置爲win32 GUI,否則不會進行編譯。我認爲這是一個代碼塊的事情。我如何使用'AllocConsole'?它會自動顯示printf的等?如果這是一個答案,你應該發佈它的積分。 – user1433767

+0

爲了記錄,我確實試圖在代碼塊論壇上詢問這個問題,但是......他們真的不喜歡回答問題。 – user1433767

回答

3

所以問題似乎不是由項目類型造成的,而是由設置/編譯器選項造成的。編譯器可以很好地找到函數聲明,但是現在連接器抱怨,因爲它找不到定義。

爲了解決這個問題,您需要鏈接到正確的庫(如MSDN文檔中所述,它是comdlg32.lib)。


在代碼塊,你可以這樣做:

  1. 轉到項目菜單,然後單擊編譯選項
  2. 單擊鏈接器設置選項卡。
  3. Click Add
  4. 類型comdlg32然後按確定。
  5. 單擊確定以保存更改並退出。

您的項目現在將鏈接到該庫建設時。如果您希望所有程序,項目或不鏈接到該庫,您可以替換步驟1中通過以下幾個步驟來代替:

  1. 轉到設置菜單,然後單擊編譯器和調試器

其餘部分與此相同,但在全球範圍內。


對於它的價值,如果你使用的原始命令行大樓,你可以添加-lcomdlg32選項產生同樣的效果。

+1

謝謝你的解釋,解決了問題。 – user1433767

2

使用AllocConsole在GUI應用程序中創建控制檯。

+0

事實上,它並不像OP有一個GUI,而只是調用一個winapi函數。 – chris