amazon

16.1.12

Visual Studioのフォームアプリケーションで、コンソールに標準出力(printf, std::cout等)を表示する方法


Visual Studioでのフォームアプリケーションは標準では、コンソールにが表示されない。
それゆえデバッグにprintfやstd::coutが使えないのが難点。

そこで、コンソール(コマンドプロンプト)を開きそこへ標準出力(printfやstd::cout)できるようにした。
以下がフォームアプリケーションのメイン プロジェクト ファイルに書き加えた例。
赤字部分がその簡易マクロと追加した行。

// MyProgram.cpp : メイン プロジェクト ファイルです。

#include "stdafx.h"
#include "Form1.h"
#include <stdio.h>
#include <windows.h>
#include <iostream>

#define OPENCONSOLE(fp) { if (!::AttachConsole(ATTACH_PARENT_PROCESS)) ::AllocConsole(); freopen_s(&fp, "CON", "w", stdout);}
#define CLOSECONSOLE(fp) {fclose(fp); ::FreeConsole();}

using namespace MyProgram

[STAThreadAttribute]
int main(array$lt;System::String ^> ^args){
FILE *fp;
OPENCONSOLE(fp);

// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);

// メイン ウィンドウを作成して、実行します
Application::Run(gcnew Form1());

std::cout<<"これでコンソールに表示される"<<std::endl;
CLOSECONSOLE(fp);
return 0;
}