OCC平台转到VS2015下MFC程序调用控制台失败解决办法

文章转自:https://blog.csdn.net/c437yuyang/article/details/54944668

一直用vs2010对occ进行编译,前几天转到vs2015平台下,好不容易花了两天的时间重新配置好了,但是发现控制台无法输入输出,一开始没在意,但是后面调试时很不方便,就决定将控制台调回来。

一开始以为是程序出错,引入了不同的输入输出流函数等,导致流无法定位,于是在头文件里面屏蔽了相关的

#include <iostream> ,#include <fstream>等,但是仍然没有用。

后面尝试在函数里面新建控制台:

 1 void CMyLattice::MakeComKernel()
 2 {
 3     AllocConsole();
 4     long ct1=GetTickCount();
 5           *
 6           *
 7           *
 8     long ct2=GetTickCount();//程序段结束后取得系统运行时间(ms)
 9     _cprintf ("bool filter time:",ct2-ct1);
10     FreeConsole();
11 }

但是太过于麻烦,而且输入较不便!

最后考虑可能是vs2015版本问题,找到一篇csdn博客,遇到同样的问题,解决办法如下:

一开始的构建函数如下所示:
BOOL CLiu_OccApp::InitInstance()
{
    .    .    .
    // Redirection of standard output to console
    int hCrt,hIn;  BOOL rep;  FILE *hf,*hi;
    _SYSTEM_INFO lps;
    GetSystemInfo(&lps);
    rep = AllocConsole();
    hCrt = _open_osfhandle((intptr_t) GetStdHandle(STD_OUTPUT_HANDLE),_O_TEXT);
    hIn = _open_osfhandle((intptr_t) GetStdHandle(STD_INPUT_HANDLE),_O_TEXT);
    hf = _fdopen( hCrt, "w" );
    hi = _fdopen( hIn, "r+t" ); //重定向输入输出 freopen_s(&pf,"CONOUT$","w",stdout);
    *stdout = *hf;
    *stdin = *hi;

   .
   .
   .
}

改为:

BOOL CLiu_OccApp::InitInstance()
{         .     .     .
       if (!AllocConsole() || !freopen("CONOUT$", "w", stdout))
        AfxMessageBox(_T("InitConsoleWindow Failed!")); //分配控制台在重定向输出流至控制台  
     .     .     .
 }

即可。

原文地址:https://www.cnblogs.com/jeasonliu/p/9223647.html

时间: 2024-10-10 23:11:03

OCC平台转到VS2015下MFC程序调用控制台失败解决办法的相关文章

平板下windows程序调用软键盘的办法

http://stackoverflow.com/questions/21140852/start-tabtip-with-numpad-view-open [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] private static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); [D

Mac下php连接mysql数据库失败解决办法

通过phpmyadmin连接mysql成功,但是通过php连接数据库失败,执行如下php语句 ? 1 @mysql_connect("localhost","root","12345") or die ("数据库服务器连接失败");// 连接服务器 之后,浏览器输出数据库服务器连接失败,下文为解决办法. 1.Mac的MySql安装路径为,*为版本号,是数字. ? 1 /usr/local/mysql_******_osx10.

&#39;mysql&#39; 不是内部或外部命令,也不是可运行的程序或批处理文件的解决办法

前言: 本文的解决方法来自http://www.cnblogs.com/xionghui/archive/2012/04/11/2442404.html --感谢! 问题描述:新电脑装mysql后在cmd面板输入:mysql -uroot -p ,出现:'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件. 原因:没有配置环境变量! 解决方法:配置环境变量 在Path中加入mysql的安装目录下的bin目录 OK! 再次打开cmd: 后记:如有类似问题直接打开本文的感谢网址即可.

android sqlite3程序不存在的解决办法(转)

在android开发中,在使用命令行操作数据库sqlite时,有时候会遇到sqlite3 not found的问题.这是因为你的手机没有安装sqlite3程序.解决办法如下(两种办法结合起来解释的更清楚!!!): 方法1: sqlite3 not found的解决办法(转) 在Android开发方面,我是小白,起步没多久.最近用到了sqlite本地缓存数据,我希望像mysql一样通过命令行查看建立的表以及表中的数据,于是用adb shell进入,敲入sqlite3,提示 sqlite3: not

FreeBSD 下sac101.6a编译失败解决办法

由于FreeBSD和Linux下C的定义有些不同,可下载下面补丁修复编译问题. http://www.iris.washington.edu/pipermail/sac-help/attachments/20130910/7f30ed61/attachment.obj FreeBSD 下sac101.6a编译失败解决办法,布布扣,bubuko.com

html页面顶部出现一段空白,检查控制台发现body 下出现&amp;#65279字符,原因及解决办法

html页面顶部出现一段空白,检查控制台发现body 下出现&#65279字符,原因及解决办法 分析: 原来是页面编码时增加了BOM,此页面后端数据主要是PHP语言,对PHP来讲PHP在设计时没有考虑BOM问题,,不会忽略UTF-8编码的文件开头BOM的那三个字符,会把BOM作为该文件开头正文的一部分.由于必须在<?或者<?php后面的代码才会作为PHP代码执行,所以将会造成在页面上输出这三个字符,显示效果就要看浏览器了,一般是一个空行或是一个乱码.由于在html一开头有这3个字符的存

windows下mysql忘记root密码的解决办法

今天早上 一朋友说自己的mysql 忘记root密码了 让我帮忙给看看,因为没有接触过mysql 所以从网上找了一下信息经我亲身实践  已经成功!mysql版本是5.1以下是从网上找的信息: 1. 首先检查mysql服务是否启动,若已启动则先将其停止服务,可在开始菜单的运行,使用命令: net stop mysql 打开第一个cmd1窗口,切换到mysql的bin目录,运行命令: mysqld --defaults-file="C:\Program Files\MySQL\MySQL Serve

Android项目中gen文件下R文件无法生成的解决办法

帮一个网友解决R文件无法生成的问题,搜集了些材料特整理如下,初学者参考他人代码时极易出现此种问题,一般都是xml文件出错,无法被正确解析. gen目录无法更新,或者gen目录下的R.JAVA文件无法生成 1.gen目录的用处 android gen目录下的R.java并不是由用户创建,而是android工程本身将android的资源进行自动"编号"(ID)值. 2.gen目录下R文件无法更新/生成的原因 1)res目录下的layout下的xml文件名有错.按照android的命名规范是

asp.net 项目在 IE 11 下出现 “__doPostBack”未定义 的解决办法

最近项目在 IE 11 下<asp:LinkButton> 点击出现 “__doPostBack”未定义”,经过一番google,终于知道了原因:ASP.NET 可能无法辨识出一些浏览器的最新版本,还会经常把它们看做是低级的浏览器.(也就是: 不支持JavaScript.) 详见: http://blogs.msdn.com/b/scott_hanselman/archive/2011/10/28/asp-net-ie10-dopostback-javascript-ff5.aspx本人按照该