2012-08-27 39 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