2

我正在使用 MinGW 处理代码块,并且我有一个已经从事了一段时间的编码项目。我一直在使用的项目是控制台应用程序,而我的调试功能依赖于打印到控制台。

但是,最近,我尝试实现 windows 'GetOpenFileName()' 函数来拉出一个打开的文件框,这样用户打开文件会容易得多。但是,当在包含头文件的控制台应用程序中使用项目时,MinGW 编译器就像找不到函数一样。但是我发现将项目更改为 win32 GUI 允许编译器找到该函数(我不完全理解为什么,但这只是我)。

问题是这样的:我试图将调试信息输出到控制台,但当然现在应用程序是 win32 GUI,控制台不显示,因此我看不到调试信息,我无法将其切换回控制台应用程序否则 Windows 打开文件框代码将无法编译。如何既显示控制台又允许项目正确编译 Windows GUI 代码?

我无法更改调试功能或使用不同的调试功能,因为它们被写入所有类以帮助回溯错误,并且至少有 43 个文件,其中大多数使用调试功能。

4

2 回答 2

3

因此问题似乎不是由项目类型引起的,而是由设置/编译器选项引起的。编译器可以很好地找到函数声明,但链接器现在抱怨,因为它找不到定义。

为了解决这个问题,您需要链接到正确的库(如 MSDN 文档中所述,它是comdlg32.lib)。


在 CodeBlocks 中,您可以通过以下方式执行此操作:

  1. 转到项目菜单并单击构建选项
  2. 单击链接器设置选项卡。
  3. 单击添加
  4. 键入comdlg32并按 OK。
  5. 单击确定保存更改并退出。

现在,您的项目将在构建时链接到该库。如果您希望所有程序(项目与否)链接到该库,您可以将步骤 1 替换为以下步骤:

  1. 转到Settings菜单并单击Compiler and Debugger

其余的从那里开始是一样的,但在全球范围内。


对于它的价值,如果您使用原始命令行构建,您可以添加-lcomdlg32选项以产生相同的效果。

于 2012-08-27T22:03:34.757 回答
2

用于AllocConsole在 GUI 应用程序中创建控制台。

于 2012-08-27T20:07:52.267 回答