○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++