VC++6.0のMFC APPWizard(exe)において、リンカーオプションの
subsystem:console でDOS画面にprintfでデバッグ出力しようとしたのですが、Buildで、
msvcrtd.lib(crtexe.obj) : error LNK2001: 外部シンボル "_main" は未解決です
と怒られてしまいます。
この対策または、目的を達成するためにはどうすればよいのでしょうか?どなたか教えてください。
また、Visual Studio 2005 でもVC++で同じようなことになるのでしょうか?
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
どうもありがとうございます。
コンソールに出したいと考えたのは、設定のオプションを切り替えるだけで実現するとの思いがあったからです。通常は単にデバッガーでながめていればよいのですが、問題が特定できないときは何箇所かにプリントをいれてリアルタイムに眺めていたい(他の割り込みもありませんので)。ファイル出力でも間に合います。
エディットボックスの件参考にさせていただきます。
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/basi …
この回答への補足
ご丁寧な回答ありがとうございます。
ついでですので、
1)MessageBox()だとウインドウを出して”待ち”状態になりますよね。待ち状態を抑止する方法、待たずに1回目に出したウインドウに連続してメッセージを出せればよいのですが。
2)DOSウインドウを出して、cout , printf で出す方法をご存知ないでしょうか?
No.1
- 回答日時:
MFCで subsystem:consoleは使えないように思います ...
AppWizard自体 SDI/MDI/ダイアログの3種類しかサポートしてません
このリンカーオプションは Win32のコンソールアプリケーションを作成するために用意されているように思います
通常 コンソールアプリならmain関数 WindowsのGUIアプリならWinMainが使われます
このあたりを制御するオプションだと思います ...
どうもありがとうございました。
実は、Visual Sudio 2005(Academic)のほうで、試したのですが、
CLR でプロジェクトを開いて、Form1.hの中で、
cout, printf (---subsystem:console に変更)
を実行すると、DOSウインドウを別個に開いて出力してくれました。
詳しくはわからないのですが、console application モードと同じなのかもしれませんが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) フレームワーク「4.8.1」で、[Sub Main]が動かない。助けて下さい 3 2022/11/14 15:40
- その他(SNS・コミュニケーションサービス) ゲームでボイスチャットを使いたいんですが、親にどう説明したらいいですか 2 2022/08/03 14:07
- その他(悩み相談・人生相談) ゲーム中、VCするときの癖についての悩みです 1 2023/06/10 21:35
- その他(プログラミング・Web制作) python fbprophetについて 1 2022/09/29 19:44
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- その他(悩み相談・人生相談) ゲーム中の癖でこまってます 1 2023/05/19 00:52
- プリンタ・スキャナー Brother MFC-7460DNの一時停止解除について 1 2022/12/03 12:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
AIに回答させるって
-
プログラムについての質問です...
-
VBAでテキスト出力時のスペース...
-
VBAで有効数字の設定
-
LaTeX:tableofcontentsによる目...
-
アクセスでエクセルに出力する...
-
携帯の液晶画像をパソコンに出...
-
Accessのテーブルからcsv出力す...
-
coutで出力した文字を消去する...
-
4Kの外部モニターに出力すると...
-
C#でアクセス権限の取得方法が...
-
改行の仕方
-
C言語の標準関数の引数の順番に...
-
COBOLのMOVEで桁数が異なる場合
-
KEYENCEのシーケンスプログラム...
-
printfの書式%.*s
-
OBS配信すると、マイクが途切れ...
-
wsprintfで浮動小数を扱うには?
-
Excel VBAで値を変えながら、pd...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
4Kの外部モニターに出力すると...
-
コンセントの電力は入力と出力...
-
MMDでavi出力が出来ない
-
OBS配信すると、マイクが途切れ...
-
VBAでテキスト出力時のスペース...
-
cout と cerrの違い
-
COBOLのMOVEで桁数が異なる場合
-
ACCESS クエリ→フォーム...
-
アクセスでエクセルに出力する...
-
VBAのExecメソッドで画面を非表...
-
テキストファイルから特定の文...
-
Windows11対応の3入力1出力 USB...
-
VBAで有効数字の設定
-
スマホのバッテリー消費につい...
-
Excel VBAで値を変えながら、pd...
-
NTTのホームゲートウェイとOCN...
-
定格冷房能力(出力)とは 定格...
-
プログラムについての質問です...
-
PS5をMacBookProに出力したいの...
おすすめ情報