[Windows]_[中级]_[界面程序打开控制台输出-转发输出到控制台]
场景:
1. 开发Windows界面程序时,需要打印输出,断点在调试多线程程序有局限性,就是会干扰线程的优先顺序,看不到正确的结果,往往就是断点就没事,
没断点程序就不能正常运行了; 还有输出能看到程序的执行过程,断点的话就太麻烦了,你得不停的按快捷键。
2. 使用动态库(静态库)时,出现问题时在Dll里写std::cout输出信息是必不可少的调试方法,特别对于多线程程序,谁先谁后暂停后的结果就会不一样了。
有时候没有动态库的代码时,也没法对动态库打断点。
3. 打开控制台窗口后只能看到WIndows程序的输出而无法看到Dll的输出?
4. 直接改配置属性-》链接器-》子系统为 控制台 (/SUBSYSTEM:CONSOLE) 是不现实的,因为我们开发的是界面程序。
方法1, 在输出窗口查看打印日志,使用函数:
void WINAPI OutputDebugString(__in_opt LPCTSTR lpOutputString
);
方法2, 像Console程序那样打开控制台窗口,不需要OutputDebugString,为了查看std::cout, printf输出, 添加代码:
static void OpenConsole()
{AllocConsole(); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); int hCrt = _open_osfhandle((long)handle,_O_TEXT); FILE * hf = _fdopen( hCrt, "w" ); *stdout = *hf;
}
在 _tWinMain 的开始调用
#ifdef _DEBUGOpenConsole();
#endif
结束时调用
#ifdef _DEBUGFreeConsole();
#endif
问题来了
我们自己写的Dll库里写的std::cout输出并没有打印出来?
原因就是Dll和Windows使用的不是同一个运行时库,所以导致OpenConsole()对动态库无效.
解决办法就是有2个步骤要确认,界面和动态库都需要同样的配置:
1. 配置属性-》常规-》MFC的使用: 在共享DLL中使用MFC
2. 配置属性-》C/C++ -》代码生成-》多线程调试 DLL(/MDd)
现在已经可以在控制台看到DLL的输出了,解决,不谢.^-^
参考:
Redirecting console output of c++ dll used in MFC GUI application
[Windows]_[中级]_[界面程序打开控制台输出-转发输出到控制台]相关推荐
- 怎么用java打开文件_如何使用java程序打开一个文件?
首先应该了解一点:Runtime是Java虚拟机运行时的一个对象,而Java虚拟机运行实际上是操作系统的一个进程而已.通过Runtime对象可以启动其它的子进程,从而返回一个process的对象.说白 ...
- [WTL/ATL]_[中级]_[自定义TrackBar]
场景 开发WTL/ATL界面程序时, 有时候会需要微调控件进行缓慢增减数值. 但是微调控件在大数值调整上往往比较麻烦,需要点击很多次.这时就需要使用TrackBar控件[1]进行大数值的快速变化. 标 ...
- dumpbin的使用方法_[Windows]_[中级]_[使用命令行工具dumpbin分析文件]
dumpbin(vs自带) 1. 导出lib文件的函数符号(symbols) dumpbin /exports zlib1.lib Microsoft (R) COFF/PE Dumper Versi ...
- [Gdiplus]_[中级]_[绘图实现单行文本的多种颜色]
场景 在使用 Gdiplus 绘制文本时, 偶尔会遇到需要支持绘制格式化文本的时候,而 Gdiplus 在这方面并不好,没有官方提供支持的类,也不支持 HTML 标签和 CSS 的样式. 而大部分提供 ...
- windows虚拟桌面_如何在Windows 10的新虚拟桌面中打开应用程序或文件
windows虚拟桌面 Microsoft has finally added virtual desktops as a built-in feature to Windows 10. Virtua ...
- dsp点亮led程序_点亮它:使用新的Windows 7功能的应用程序列表
dsp点亮led程序 I'm digging Windows 7 more and more. So much so, that I'm watching out for apps that use ...
- 在本地windows终端打开远程服务器的图形界面程序
问题描述 在终端通过ssh远程连接服务器后,我们希望直接打开远程服务器的图形界面程序 解决方案 修改远程服务器的/etc/ssh/sshd_config文件 X11Forwarding yes #X1 ...
- Windows核心编程_注册表操作和小练习程序关联
大家有没有见过就是当我们下载一个软件比如视频播放器 下载之后我们电脑上的视频文件图标都变成了这个视频播放器的图标,然后打开时也是默认调用此视频播放器来播放 下面就给大家介绍如何在Windows平台上实 ...
- Windows核心编程_设置Windows开机自动登录
设置自动登录的方法在Windows中已经给出了非常方便的方法,当Windows内核进入登入界面时会检查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ ...
最新文章
- arm 饱和指令_ARM平台下NEON使用方法详解
- Javascript如何改变数组的长度?
- Nginx rewrite使用
- 双塔模型在Airbnb搜索排名中的应用
- 深度使用魅族16T后的评价(本人魅友,绝对客观公正,不要盲目的为手机厂商辩护,想想从当初到现在,魅族正在一步步背离自己的信仰,有问题,解决问题才能有更好的发展)
- java test circle_TestCircle.java
- Linux笔记-SVN(subversion)创建仓库及客户端连接及文件回滚
- STM32学习——TIM基本定时器
- 95-190-028-源码-window-Window介绍与使用md
- 解决easyExcel和poi版本冲突问题
- scapy获取ip_如何使用scapy从数据包中读取整个ip层和tcp层?
- 使用sed在文件中定位文本的方式
- 大白话理解LSTM神经网络(附实例讲解)
- 【方向盘】Spring Boot 2.5.0正式发布,环境变量可指定前缀的功能很赞
- 以WBS模板和PBS自动生成WBS计划任务
- 简历中“项目经历“该如何写?
- Linux下PDF转图片格式
- 直流电阻测量方法介绍
- Android多媒体之GL-ES战记第一集--勇者集结
- 南华大学计算机考研真题,2021南华大学考研历年真题复习资料