Visual Studio 2012 C++ 标准输出

2023-11-30

编译 Win32 应用程序时,fprintf(stdout/stderr) 在 Visual Studio 中打印到哪里?我一直听到它进入输出,但我看不到它!

在 C++ 中没有控制台窗口的情况下打印到输出日志的标准方法是什么?


如果您的程序与 /SUBSYSTEM:WINDOWS 链接,除非您分配控制台,否则您将看不到控制台输出。

这是分配控制台选项的代码。使用此方法,您不需要更改链接器设置或创建 WinMain。

static void OpenConsole()
{
    int outHandle, errHandle, inHandle;
    FILE *outFile, *errFile, *inFile;
    AllocConsole();
    CONSOLE_SCREEN_BUFFER_INFO coninfo;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
    coninfo.dwSize.Y = 9999;
    SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);

    outHandle = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
    errHandle = _open_osfhandle((long)GetStdHandle(STD_ERROR_HANDLE),_O_TEXT);
    inHandle = _open_osfhandle((long)GetStdHandle(STD_INPUT_HANDLE),_O_TEXT );

    outFile = _fdopen(outHandle, "w" );
    errFile = _fdopen(errHandle, "w");
    inFile =  _fdopen(inHandle, "r");

    *stdout = *outFile;
    *stderr = *errFile;
    *stdin = *inFile;

    setvbuf( stdout, NULL, _IONBF, 0 );
    setvbuf( stderr, NULL, _IONBF, 0 );
    setvbuf( stdin, NULL, _IONBF, 0 );

    std::ios::sync_with_stdio();

}

如果您不想直接分配控制台,您还可以通过更改链接器设置的子系统将子系统从 /SUBSYSTEM:WINDOWS 更改为 /SUBSYSTEM:CONSOLE。请记住,当 /SUBSYSTEM:CONSOLE 启用时,GUI 仍将像以前一样工作,但 Windows 将为您以及应用程序创建一个控制台窗口。

在我的 Qt 代码中,这就是所需要的。但是,当我在 VisualStudio 中尝试 MFC 并通过链接器设置将子系统设置为控制台时。我收到以下错误:

1>------ Build started: Project: MFCApplication1, Configuration: Debug Win32 ------
1>  MFCApplication1.cpp
1>msvcrtd.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
1>X:\Test\VC.110\MFCTest\MFCApplication1\Debug\MFCApplication1.exe : fatal error LNK1120: 1 unresolved externals

这是由于控制台应用程序中的入口点默认为 main() 以及 Windows 应用程序中的入口点默认为 WinMain 造成的。为了解决这个问题,我必须将以下内容添加到高级链接器设置的入口点设置中:“wWinMainCRTStartup”

Ben Voigt 在评论中提出了一种替代方法。使用 editbin 更改子系统不需要更改入口点。情况确实如此。我删除了入口点并放回了 Windows,因为子系统构建了测试应用程序,然后使用 editbin 使用以下命令更改子系统:

X:\Test\VC.110\MFCTest\MFCApplication1\Debug>editbin MFCApplication1.exe /SUBSYSTEM:CONSOLE
Microsoft (R) COFF/PE Editor Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.

我在控制台中得到了预期的输出:

X:\Test\VC.110\MFCTest\MFCApplication1\Debug>MFCApplication1.exe
Hello from a windows application!
 

Note:使用 editbin 方法,您需要在每次更新可执行文件时启用此功能。

最后,一旦您拥有控制台 printf 或 std::cout 就可以使用任何一种方法。例如,在我的测试 MFC 应用程序中,我将以下行添加到 CMFCApplication1App 类的构造函数中:

std::cout << "Hello from a windows application!" << std::endl;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio 2012 C++ 标准输出 的相关文章

  • C++ Singleton 类 getInstance (作为 java)[重复]

    这个问题在这里已经有答案了 可能的重复 谁能给我提供一份 C 中的 Singleton 示例吗 https stackoverflow com questions 270947 can any one provide me a sample
  • 如何指定CMAKE外部项目的编译器?

    我使用ExternalProject Add 包含一个外部项目 我想要的是能够做到 cmake DCMAKE CXX COMPILER
  • HttpResponseMessage 的内容为 JSON

    我有一个 ASP NET MVC WEB API 由于多种原因 由于没有授权而重定向 我不能只使用一个简单的对象并在我的控制器方法中返回它 因此我需要 HttpResponseMessage 类来允许我重定向 目前我正在这样做 var re
  • 如何在C编程中获取当前时间(以毫秒为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 ANSI C 测量以毫秒为单位的时间 https stackoverflow com questions 361363 how to measure time in milliseconds
  • 优化对绑定到 DataGridView 的 DataTable 的更新

    我的应用程序中有一个显示一些数据的表单 当我第一次显示表单时 我将一些数据加载到 DataTable 中 然后将 DataTable 绑定到 DataGridView 我还启动了一个异步方法来执行一些较慢的数据库查询 当这些慢查询完成时 我
  • 按位非运算符

    为什么要按位运算 0 打印 1 在二进制中 不是0应该是1 为什么 你实际上很接近 在二进制中 不是0应该是1 是的 当我们谈论一位时 这是绝对正确的 然而 一个int其值为0的实际上是32位全零 将所有 32 个 0 反转为 32 个 1
  • .NET 中 IEqualityComparer 中 GetHashCode 的作用是什么?

    我试图了解 IEqualityComparer 接口的 GetHashCode 方法的作用 下面的例子取自MSDN using System using System Collections Generic class Example st
  • 使用 for 循环创建链表

    这是我的结构 struct ListItem int data struct ListItem next 假设链表的第一个节点的 data 0 我想编写一个 for 循环来创建大小为 5 的链表 但我不知道如何工作 我尝试了以下方法 int
  • 表单.位置不起作用

    我之前问过这个问题 以为我已经解决了 但它仍然不起作用 Form Show 稍微移动表单位置 https stackoverflow com questions 1214014 form show moves form position s
  • C# Linq 可以做组合数学吗?

    我有这个数据结构 class Product public string Name get set public int Count get set var list new List
  • DLL 中的 XP 风格组合框

    我需要使用 C 和 WIN32 API 无 MFC 在 DLL 中创建 XP 风格的组合框 我设法在 DLL 中创建控件 不是以 XP 风格 我设法在带有清单的 exe 中创建 XP 样式组合框 但它在 DLL 中不起作用 为了让您的 DL
  • C++ std:.auto_ptr 或 std::unique_ptr (支持多个编译器,甚至是旧的 C++03 编译器)?

    我正在尝试更新一些 C 代码 我想转向更现代的代码 c 11 但我仍然需要使用一些较旧的编译器 兼容 c 03 来编译代码 因为支持的平台限制 我知道在 C 11 编译器中 std auto ptr 已被弃用 但由于较旧的编译器支持 我不能
  • MPI_Gatherv:根数组中收到的垃圾值

    我正在尝试实施MPI Gatherv函数于C 根据我的程序 包括 root 在内的每个进程都应该创建一个大小等于 进程的等级 1 这将在所有单元格中保持进程的等级 然后这个本地数组被收集到根的 rcv array 中 不知何故 我得到了垃圾
  • 如何从句柄确定进程是 32 位还是 64 位?

    如何从使用 OpenProcess 获取的进程句柄中获取信息 无论进程是 32 位还是 64 位 是的 IsWow64Process 毫无用处 令人烦恼 它的真正意思是 启用了 32 位模拟 如果您在 32 位操作系统上运行 则返回 fal
  • 在发送传出请求之前将新的 SoapClient 绑定到特定 IP 地址

    假设应用程序所在的计算机具有 SoapClient 具体来说 我正在使用 Microsoft Web Service3 Messaging SoapClient 它通过发送传出请求并获取 SoapEnvelope 作为回报 完善的流程 与远
  • 派生类的聚合初始化

    以下代码无法使用 Visual Studio2017 或在线 GDB 进行编译 我期望它能够编译 因为迭代器只是一个具有类型的类 并且它是从公共继承的 这是不允许的还是在 VS2017 中不起作用 template
  • 检测用户是否正在滚动 dataGridView 滚动条

    我正在更新一个dataGridView与一个新的数据表使用 dataGridView1 DataSource table 但是 我不想在用户滚动 dataGridView 时执行此操作 如何检查滚动条是否正在滚动或已完成滚动 即拖动而不是单
  • 如何通过Task.ContinueWith创建传递?

    我想在原始任务结束时添加一个任务 但想保留原始结果和类型 附加任务仅用于记录目的 例如写入控制台等 例如 Task Run gt DateTime Now Hour gt 12 Hey throw new Exception Continu
  • 字符串常量之前应有非限定 ID

    我目前正在编写一个 C 应用程序 它与 math h 结合实现了振荡器 我拥有的代码应该可以很好地用于该应用程序 尝试编译目标文件 但是我遇到编译器错误 很可能与语法 等有关 我认为这与命名空间有关 错误 终端输出 User Name Ma
  • Selenium WebDriver 在按钮单击事件上无法正常工作。这里有什么问题呢?

    I am using following code to scrape data from a website I have following interface 这是 HTML div class es content div

随机推荐

  • SSRS 2012 和 CSV 导出

    我正在使用 SSRS 2012 尝试执行以下操作 某些列应仅根据用户请求使用组合框可见 列的可见性取决于组合上所选的列 这看起来效果很好 当我以不同于 csv 的任何格式导出输出时 这些列保持不可见 但是 当导出到 csv 时 会显示不可见
  • 如何修改jenkins中可编辑电子邮件插件中的mime消息

    我想修改从詹金斯发送的电子邮件 我该怎么做 我尝试使用 msg 变量并使用 msg setContent 这是我在电子邮件正文中想要的字符串 设置内容 但它失败了 有任何想法吗 我刚刚面临同样的任务 msg setContent Test
  • 如何在应用程序制作工具中创建rest api?

    有没有办法在应用程序制造商的服务器端脚本中创建 REST API 我需要从 iOS 应用程序调用服务器端函数 传递一些参数并获得响应 而无需转到应用程序中的页面 我知道对于常规的谷歌应用程序脚本来说 可以通过执行 API 来实现 但我不知道
  • 是否可以通过管道在 Mongo 中高效地进行排序、分组和限制?

    给定具有年龄索引的用户 name Bob age 21 name Cathy age 21 name Joe age 33 获取输出 id 21 names Bob Cathy id 33 names Joe 是否可以按年龄排序 分组和限制
  • 为什么 AppleScript 总是在按下 Command 的情况下发送击键?

    我看到很多这样的 AppleScript 例子 tell application TextEdit activate tell application System Events keystroke s end tell end tell
  • golang rune() 函数如何工作

    我发现网上发布的一个函数使用了rune golang 中的函数 但我很难查找它是什么 我正在阅读本教程 但对文档缺乏经验 因此很难找到我想要的内容 具体来说 我想看看为什么会失败 fmt Println rune foo 这并不 fmt P
  • 使用 malloc 进行动态内存分配 [重复]

    这个问题在这里已经有答案了 include
  • 如何在打开扬声器的情况下打电话

    这里带来的是从我的活动中拨打电话的代码 public void makeAPhoneCallWithSpeakerOn String uri tel posted by trim Intent intent new Intent Inten
  • 关系的数据结构

    我正在将 VB6 转换为 C 并且希望使保存值和关系的数据结构更加高效 在 VB 中 我有一个值的集合以及这些值之间的关系的另一个集合以及这些关系的优先级 我还有一个算法 当一组值传递给它时 将返回将这些值连接在一起所需的所有关系 例如 假
  • 在 sqlalchemy 中使用数据库名称限定表名称

    我在多个数据库上使用 sqlalchemy 和 elixir 目前 多个会话一切正常 一个会话绑定到不同的数据库 但是 在某些情况下 我想使用一个会话来查询另一个数据库 这是为了支持具有不同复制数据库的多个服务器 问题是 当对一个会话进行查
  • Rstudio:尽管安装了插件,但“未找到插件”

    我正在尝试安装 Rstudio 插件 但它们没有显示在 插件 按钮或 工具 插件 浏览插件 菜单中 我先更新了我的Rstudio 然后再次重新安装 但没有效果 我就是这样进行的 devtools install github rstudio
  • 使用正则表达式搜索 NSString

    我该如何去搜索 枚举NSString使用正则表达式 正则表达式例如 NS UI w g 你需要使用NSRegularExpression class 文档中启发的示例 NSString yourString NSError error NU
  • 使用自定义 android.bluetooth。而不是 android studio 中默认 sdk android.jar 中存在的一个

    我想使用自定义的 android bluetooth 而不是 android SDK 附带的 android jar 中存在的 我将 android bluetooth 编译成单独的 jar 文件并导入到 studio apk 项目中 将其
  • 使用 TFS API 将代码签入 TFS 服务器

    我正在编写 C 代码来将代码签入 TFS 服务器 Workspace WS VersionControl GetWorkspace TeamProject WS Map TFSMapServerPath LocalWorkingPath i
  • “尝试”关键字的位置差异

    我有一个音频播放器的全局变量 在变量初始化之前放置 try 字有什么区别 do try audioPlayer AVAudioPlayer contentsOf audioURL catch 并在调用构造函数之前放置 try do audi
  • 在sqlite android中选择查询

    String temp address nothing try String selectQuery SELECT lastchapter FROM Bookdetails INTO temp address WHERE bookpath
  • 如何使用 Datagridview 绑定源 C# 更新 SQL Server 数据库

    我正在用 C 编写一个 Winforms 应用程序 使用户能够使用 datagridview 编辑和更新数据库 问题是 我无法让它发挥作用 我唯一能做到的就是更新 datagridview 显示的内容 但是当我进入数据库表时 数据没有变化
  • Safari WIndows 和透明 Flash

    编辑 该问题现在似乎仅限于 Windows 版 Safari 大约在 Windows 4 版 Safari 发布时 我开始从用户那里听到 wmode transparent 不再在 Safari 中工作 我已经用谷歌搜索了很多次 但没有找到
  • 这在文档中是什么意思:方括号后跟逗号([,)[重复]

    这个问题在这里已经有答案了 今天这引起了我的注意jQuery 的 API 文档为了closest选择器 closest selector context 到底是做什么的 context 意思是 我知道我可以在那里放置一个变量或 jQuery
  • Visual Studio 2012 C++ 标准输出

    编译 Win32 应用程序时 fprintf stdout stderr 在 Visual Studio 中打印到哪里 我一直听到它进入输出 但我看不到它 在 C 中没有控制台窗口的情况下打印到输出日志的标准方法是什么 如果您的程序与 SU