• ベストアンサー

VC++6.0 MFC APPWizard(exe)で_main未解決

VC++6.0のMFC APPWizard(exe)において、リンカーオプションの subsystem:console でDOS画面にprintfでデバッグ出力しようとしたのですが、Buildで、 msvcrtd.lib(crtexe.obj) : error LNK2001: 外部シンボル "_main" は未解決です と怒られてしまいます。 この対策または、目的を達成するためにはどうすればよいのでしょうか?どなたか教えてください。 また、Visual Studio 2005 でもVC++で同じようなことになるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★アイディア ・デバッグするために printf() 関数を利用したいのでしょうか?  ウインドウに出力するよりもファイルに出力した方が簡単な気がします。 ・それともコンソール画面にどうしても出力したいのでしょうか?  コンソール画面の操作は詳しくありませんが、簡単なモードレス・ダイアログを  1つ用意してそのダイアログにはエディット・ボックスを1つ貼り付けておきます。 ・そしたら printf() の代わりに wsprintf() 関数で作成した文字列をエディット  ボックスにどんどん文字列追加していく方法はどうでしょうか。  文字列の追加は  http://oshiete1.goo.ne.jp/qa2854941.html→『エディットボックスで改行』  を参考にして下さい。  EM_REPLACESEL メッセージでエディット・ボックスに文字列を追加できます。 ・以上。簡易デバッグ画面の出力アイディアでした。

参考URL:
http://www.nitoyon.com/vc/tutorial/debug/win32.htm
abingo333
質問者

お礼

どうもありがとうございます。 コンソールに出したいと考えたのは、設定のオプションを切り替えるだけで実現するとの思いがあったからです。通常は単にデバッガーでながめていればよいのですが、問題が特定できないときは何箇所かにプリントをいれてリアルタイムに眺めていたい(他の割り込みもありませんので)。ファイル出力でも間に合います。 エディットボックスの件参考にさせていただきます。

その他の回答 (2)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドバイス ・WinMain() から始めているウインドウには printf() でのデバッグではなく  メッセージボックスなどを使って下さい。  MessageBox( hWnd, "テキスト内容", "タイトル", MB_OK );  ↑  これで簡単な変数などの内容を表示できます。  ただし、書式制御文字列が使えないので工夫する必要があります。  下にそのサンプルを載せます。 サンプル: TCHAR szBuff[ 1024 ]; wsprintf( szBuff, TEXT("value1 = %d\nvalue2 = %d\n"), value1, value2 ); MessageBox( hWnd, szBuff, TEXT("デバッグ"), MB_OK ); その他: ・可変長引数を取る関数を自作した方が便利かも。→デバッグ表示用の関数です。  可変長引数の文字列は va_list型、va_start、va_arg、va_end、vsprintf() 関数群を  利用します。詳しくはマニュアルなどで確認して下さい。サンプルも載っているはずです。 ・以上。

参考URL:
http://program.station.ez-net.jp/special/vc/basic/function/stdarg.asp
abingo333
質問者

補足

ご丁寧な回答ありがとうございます。 ついでですので、 1)MessageBox()だとウインドウを出して”待ち”状態になりますよね。待ち状態を抑止する方法、待たずに1回目に出したウインドウに連続してメッセージを出せればよいのですが。 2)DOSウインドウを出して、cout , printf で出す方法をご存知ないでしょうか?

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

MFCで subsystem:consoleは使えないように思います ... AppWizard自体 SDI/MDI/ダイアログの3種類しかサポートしてません このリンカーオプションは Win32のコンソールアプリケーションを作成するために用意されているように思います 通常 コンソールアプリならmain関数 WindowsのGUIアプリならWinMainが使われます このあたりを制御するオプションだと思います ...

abingo333
質問者

お礼

どうもありがとうございました。 実は、Visual Sudio 2005(Academic)のほうで、試したのですが、 CLR でプロジェクトを開いて、Form1.hの中で、 cout, printf  (---subsystem:console に変更) を実行すると、DOSウインドウを別個に開いて出力してくれました。 詳しくはわからないのですが、console application モードと同じなのかもしれませんが。