在mingw:'上从WinAPI gui程序打开控制台_fdopen&x27;未在此范围中声明
我目前正在MinGW下开发WinAPI Gui应用程序。在调试版本中,我想打开控制台并将stdin/stdout流重定向到它,以便可以看到在调试中打印的诊断消息。我跟随这篇文章: 它在Visual Studio下工作,但在MinGW上编译时,即使包含stdio.h,也会显示以下消息:在mingw:'上从WinAPI gui程序打开控制台_fdopen&x27;未在此范围中声明,winapi,mingw,console-application,Winapi,Mingw,Console Application,我目前正在MinGW下开发WinAPI Gui应用程序。在调试版本中,我想打开控制台并将stdin/stdout流重定向到它,以便可以看到在调试中打印的诊断消息。我跟随这篇文章: 它在Visual Studio下工作,但在MinGW上编译时,即使包含stdio.h,也会显示以下消息: error: '_fdopen' was not declared in this scope MinGW的论点: mingw32-g++.exe -march=pentium4 -std=c++11 -w -
error: '_fdopen' was not declared in this scope
MinGW的论点:
mingw32-g++.exe -march=pentium4 -std=c++11 -w -fpermissive -fno-strict-aliasing -D__STDC_CONSTANT_MACROS -D_WINDOWS -DUNICODE -D_UNICODE -g -D_DEBUG
我在谷歌上搜索了很多,这似乎是MinGW中的一个bug,如果使用C++11,则在头文件中没有定义_fdopen。由于我依赖于C++11功能,所以我无法关闭它,所以我正在寻找替代方案——有没有办法在Windows上打开控制台并重定向不依赖fdopen的stdin/stdout?如果没有,我的问题还有其他解决方案吗
我还试图手动声明\u fdopen
(或fdopen
),但它没有通过链接阶段
MinGW版本:4.7.1根据一些简短的研究,我的理解是,您应该能够在GNU C++11中使用具有正确配置设置的
\u fdopen
/fdopen
(即通过启用POSIX函数),但Windows实现中存在一个长期存在的缺陷。您是否可以直接解决这个问题可能取决于您使用的运行库
但是,根据场景的不同,还有其他各种可能的解决方法:
- 在您的特定情况下,因为您是在构建时做出决定的,所以您可以简单地将调试版本构建为控制台应用程序,并让Windows来完成这项工作
- 应该可以(同样,取决于运行库)配置构建,以便您的一些代码在运行库初始化之前运行;如果控制台已经存在,则运行库有望在初始化期间导入标准流
- 您应该能够使用
打开fopen
和/或CONIN$
以直接获取文件对象,而不是使用CONOUT$
获取Windows句柄。这可能是最普遍的解决方案GetStdHandle