
No.4ベストアンサー
- 回答日時:
★『gcc』には詳しくないので参考までに。
・『gcc』で Windows のコンソール・アプリケーション(CUI)で作成していますか?
WinMain 関数のエラーが出るということは、GUI で作成しているのかな。→CUIに変更してみる。
『gcc』でもWindows のコマンド・プロンプトから実行できるコンソール・アプリケーションが
作成できると思いますので、その設定にして下さい。もしも、GUI で作成する場合は、main の
関数ではなく、WinMain 関数に記述します。
・また、前回紹介した関数は Win32 API ですので、API 関数を利用できる環境(SDK)などが
インストールされている必要があります。
・とりあえず、下のサンプルがコンパイルできますか試して下さい。→CUI に変更した後に。
サンプル:
#include <stdio.h>
#include <windows.h>
#define SPC (0x20)
#define ATR (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
// 画面消去(ESC [2J)と等価
void cls( void )
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
COORD coord;
HANDLE hOut;
DWORD dwWrite;
hOut = GetStdHandle( STD_OUTPUT_HANDLE );
GetConsoleScreenBufferInfo( hOut, &csbi );
dwWrite = (csbi.dwSize.X * csbi.dwSize.Y);
coord.X = 0;
coord.Y = 0;
SetConsoleCursorPosition( hOut, coord );
SetConsoleTextAttribute( hOut, ATR );
FillConsoleOutputCharacter( hOut, SPC, dwWrite, coord, NULL );
FillConsoleOutputAttribute( hOut, ATR, dwWrite, coord, NULL );
}
int main( void )
{
printf( "画面を消去します - Pause -" );
getchar();
cls();
return( 0 );
}
最後に:
・main 関数を利用したい場合は、Windows のコンソール・アプリケーション(CUI)で
作成して下さい。プログラムを CUI に変更すれば、回答者 No.2 さんのアドバイス
でも上手くエスケープシーケンスが利用できると思います。
・『This Program cannot be run in DOS mode.』というエラーはこのプログラムは
DOS モードで実行できません。という意味です。→Windows の GUI 用に作られた
場合は実行できないのです。
・DOS プロンプトでも実行可能なコンソール・アプリケーション(CUI)に変更して下さい。
・以上。参考に!→『gcc』は詳しくないため設定方法が分かりません。頑張って下さい。
No.3
- 回答日時:
★ヒント
・MS-DOS の OS ではエスケープシーケンスは利用できますが、Windows のコンソールでは
利用できません。DOS/V機(今のWindowsパソコン)では、エスケープシーケンスを利用するための
デバイスドライバなどを組み込めば利用できる。という事を昔、聞いた事があります。
最近ではコンソール・アプリケーションを作成していませんし、エスケープシーケンスも使おうとも
思わないせいか詳細な方法は分かりません。その代わりに下の関数で消去可能です。
・『FillConsoleOutputCharacter()』関数で指定座標から指定文字数だけ書き込む(消去)が可能です。
MS-DOS の OS ではないため、エスケープシーケンス全部が上手く利用できません。
・回答者 No.2 さんの情報と次のリンクを参考にして下さい。
リンク:
・http://www.kumei.ne.jp/c_lang/intro/no_61.htm→『第61章 コンソールアプリで画面消去』
・http://www.kumei.ne.jp/c_lang/intro/no_58.htm→『第58章 コンソールアプリで文字色を変える』
・http://www.kumei.ne.jp/c_lang/intro/no_59.htm→『第59章 コンソールアプリで簡易時計を作る』
関連関数:
・GetStdHandle() // スクリーンバッファの取得
・SetConsoleTextAttribute() // テキスト色を設定
・SetConsoleCursorPosition() // カーソル位置を設定
・FillConsoleOutputCharacter() // 指定座標から指定文字数だけ書き込む
・FillConsoleOutputAttribute() // 色と背景色
その他:
・面倒ですが上記の関数などでエスケープシーケンスと同じ動作を行えます。
なお、#include <windows.h> をヘッダ部に記述しないと利用できませんので注意!
・以上。参考に!
この回答への補足
ありがとうございます。
試してみましたが、今度は
winmingw-32.a(main.o): undefined reference to "WinMain@16"
というエラーが出てしまいました。
windows.hのバグなんでしょうか?
No.2
- 回答日時:
Windows 2000/XPの『コマンドプロンプト』でご質問のプログラムを実行しても、画面は消去されませんョ。
『コマンドプロンプト』では、ANSIエスケープ・シーケンスはサポートされていないのです。
2000/XPで、ANSIエスケープ・シーケンスを利用したい場合には、"%SystemRoot%\system32\config.nt"ファイルに、
device=%SystemRoot%\system32\ansi.sys
を追加後、"cmd.exe"ではなく"command.com"を起動します。
『Microsoft Support Online:How to Enable ANSI.SYS in a Command Window』
http://support.microsoft.com/kb/101875/en-us/
『答えてねっと:command.comでエスケープシーケンスを使う方法。』
http://www.kotaete-net.net/Default.aspx?pgid=14& …
この回答への補足
ありがとうございます。
deadlineさんのおっしゃった通りにやってみたのですが、今度は
This Program cannot be run in DOS mode.
と表示されて実行できませんでした。
どうすれば良いんでしょうか??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows PowerShellでC言語を実...
-
excel vbaから実行するexe実行...
-
C++初心者です。 debug asserti...
-
「読み込み違反」が起きたとき...
-
MATLABのmccについて
-
ACCESSランタイムでエラー
-
C#VB、exeに埋め込んだexeの実行
-
VC++のCOMのデバッグ方法について
-
Visual Studio 「AnyCpu」について
-
Designer.vbは直接コードをいじ...
-
vba 時間の引き算 例えば 15:00...
-
VB.NETで参照設定したDLLの修正...
-
Windows10のVBAでDirectX 8が使...
-
Selenium webbrowserで開いてい...
-
う~ん…。
-
電卓の作成 VB
-
VBAでArrayListを使う為の「msc...
-
VB2008→VB2010でエラーが出てま...
-
A4の2枚をA3の1枚にする編集方法?
-
VBからプリンタに出力する時に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excel vbaから実行するexe実行...
-
Visual Studio 「AnyCpu」について
-
「読み込み違反」が起きたとき...
-
Windows PowerShellでC言語を実...
-
Format 関数のバグ?
-
C++初心者です。 debug asserti...
-
VB6.0 exe作成時に実行時エラー...
-
結果が見れない~
-
mscorlib.dllの初回例外について
-
C#VB、exeに埋め込んだexeの実行
-
一通ずつ処理したい(アウトル...
-
外部exe呼び出しの方法 ShellEx...
-
VB6 EXEとプログラムの違い
-
C言語に詳しい人に質問です。
-
ActiveDirectoryから値を取得
-
ActiveX → VB を起動するとCre...
-
JP1/File Transmission Server/...
-
ACCESSランタイムでエラー
-
MFCと.NETFramework
-
androidで.exeを実行できますか?
おすすめ情報