【问题标题】:Display console and win32 GUI显示控制台和win32 GUI
【发布时间】:2012-08-22 08:14:02
【问题描述】:

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

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

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

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

【问题讨论】:

  • 在控制台应用程序中包含 <windows.h> 应该仍然有效。但是,如果您绝对需要一个控制台但又没有,那么可以使用 AllocConsole。
  • 我确实包含了 “当在控制台应用程序中使用包含标头的项目时” - 它不会编译,除非出于某种奇怪的原因,项目设置为 win32 GUI。我想这是一个代码块的事情。如何使用“AllocConsole”?它会自动显示printf等吗?如果这是一个答案,您应该发布它以获得积分。
  • 为了记录,我确实尝试在代码块论坛上询问有关此问题,但是......他们真的不喜欢回答问题。
  • 您能否发布一些不起作用的小样本以及您遇到的错误?我在 C::B 中使用 Windows API 和 GUI 已经很长时间了,没有任何问题。
  • 是不是偶然说对GetOpenFileNameA@4的未定义引用?这是一个链接器错误,可以通过链接到comdlg32.lib 来解决。

标签: c++ user-interface console


【解决方案1】:

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

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


在 CodeBlocks 中,您可以这样做:

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

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

  1. 进入设置菜单并点击Compiler and Debugger。

其余部分与那里相同,但在全球范围内。


不管怎样,如果您使用原始命令行构建,您可以添加 -lcomdlg32 选项以产生相同的效果。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 问题是它实际上看起来并不像 OP 有一个 GUI,而只是调用一个 winapi 函数。
    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多