○WindowアプリケーションからDOS窓を開いて文字を出力
ただ単にDOS窓を開いて入出力したかっただけです

#include <stdio.h>
#include <windows.h>

int WINAPI WinMain(  HINSTANCE hInst,  HINSTANCE hPrevInst,  LPSTR lpCmdLine,  int nCmdShow)         
{
	//コンソールを作成
	FreeConsole();
	AllocConsole();

	//ハンドルを取得
	HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	HANDLE hErr = GetStdHandle(STD_ERROR_HANDLE);

	//コンソールへの出力
	WriteFile(hOut,"送信",strlen("送信"),NULL,NULL);

	//コンソールへの入力の読み取り
	DWORD dwByte;
	char str[256]="";
	ReadFile(hIn,str,256,&dwByte,NULL);
	str[dwByte] = '\0';

	FreeConsole();//コンソールの開放

	MessageBox(NULL,str,"",NULL);

	return 0;
}


■上のDOS窓に対してのprintfみたいなのを作る

可変引数リストを使い、sprintfの可変引数リスト版に直接引渡しています。
これでsprintfに仕事をさせる関数が出来上がり。

#include <stdio.h>
#include <stdarg.h>

int _printf(char*str,...){
	char pos[128];
	int r;
	va_list ap;
	va_start(ap,str);
	r=vsprintf(pos,str,ap);
	//コンソールへの出力
	WriteFile(hOut,pos,strlen(pos),NULL,NULL);
	va_end(ap);//可変引数リストの終了
	return r;
}


■Windowアプリケーションを作るときにあったら便利そうなもの

windowアプリケーションを作るときにprintfでデバックできたらはかどります。
そこで作ったものを乗せときます
_DEBUGスイッチはVisualStudioでのデバッグコンパイル時に有効になります。
printfはオーバーライド?されます。

#include <stdio.h>
#include <stdarg.h>

#ifdef _DEBUG
HANDLE hIn;
HANDLE hOut;
HANDLE hErr;
#endif

int printf(char*str,...){
#ifdef _DEBUG
	char pos[128];
	int r;
	va_list ap;
	va_start(ap,str);
	r=vsprintf(pos,str,ap);
	//コンソールへの出力
	WriteFile(hOut,pos,strlen(pos),NULL,NULL);
	va_end(ap);//可変引数リストの終了
	return r;
#else
	return 0;
#endif
}

int WINAPI WinMain(HINSTANCE hCurInst,HINSTANCE hPrevInst,
					LPSTR lpsCmdLine,int nCmdShow ){

#ifdef _DEBUG
	//コンソールを作成
	FreeConsole();
	AllocConsole();
	hIn = GetStdHandle(STD_INPUT_HANDLE);
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	hErr = GetStdHandle(STD_ERROR_HANDLE);
#endif

・・・・・いろいろな処理

}



▲トップページ > Windows と C++