• ベストアンサー

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 モードと同じなのかもしれませんが。

関連するQ&A

  • vc++6.0 のリンクエラー 教えて

    VC++6.0を使っています。オープンソースのプログラムをビルドすると、 XXXXXX.obj : error LNK2001: unresolved external symbol __imp__ntohl@4 のリンクエラーが出ます。 どうすれば良いのでしょうか? 何か設定でも間違えているのでしょうか? 初心者なので よろしくお願いいたします。

  • 外部シンボル "_main"は未解決です

    「LIBC.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です」というエラーが発生しましたが、何をみればいいのかわかりません。int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )がソースについています。

  • Visual C++ 初心者です。

    Visual C++ 2005 Express Editionをダウンロードしました。 void main() {printf ("Hello World"); getchar();} をビルドしたところ、 MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。 Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。 とエラーが出ました。 何が問題なのでしょうか。 全く初心者で、周りに質問できる人もいなくて、このアプリケーションを使わなければいけない状況です。 諸事情あって今日はもうパソコンを開けないのかもしれませんので、 お礼は遅くなると思いますが、よろしくお願いします。

  • 外部シンボル未解決 LNK2001

    外部シンボル未解決 LNK2001 外部シンボル未解決 LNK2001 今windowsXP32bitからwindowsXP64bitPCでのデバッグを行おうとしています。 開発環境VC++2005です。 しかし、32bitPCでは、エラーなどなかったのですが64bitPCだと次のようなエラーが発生しました。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DP8SP_TCPIP" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlay8Address" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlay8Address" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlay8Client" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlay8Client" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultCapture" は未解決です。 5>MainteDlg.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultCapture" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultPlayback" は未解決です。 5>MainteDlg.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultPlayback" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlayVoiceClient" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlayVoiceClient" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "PIN_CATEGORY_PREVIEW" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_IBasicVideo" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "CLSID_VideoInputDeviceCategory" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "CLSID_SystemDeviceEnum" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_ICreateDevEnum" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_IMediaControl" は未解決です。 とエラーがでています。 一応構成マネージャーの設定は、64x設定しています 何か設定などたりないのでしょうか? よろしくお願いします。

  • 外部シンボル未解決 LNK2001

    外部シンボル未解決 LNK2001 今windowsXP32bitからwindowsXP64bitPCでのデバッグを行おうとしています。 開発環境VC++2005です。 しかし、32bitPCでは、エラーなどなかったのですが64bitPCだと次のようなエラーが発生しました。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DP8SP_TCPIP" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlay8Address" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlay8Address" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlay8Client" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlay8Client" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultCapture" は未解決です。 5>MainteDlg.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultCapture" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultPlayback" は未解決です。 5>MainteDlg.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultPlayback" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlayVoiceClient" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlayVoiceClient" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "PIN_CATEGORY_PREVIEW" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_IBasicVideo" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "CLSID_VideoInputDeviceCategory" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "CLSID_SystemDeviceEnum" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_ICreateDevEnum" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_IMediaControl" は未解決です。 とエラーがでています。 一応構成マネージャーの設定は、64x設定しています 何か設定などたりないのでしょうか? よろしくお願いします。

  • 外部シンボル未解決 LNK2001

    外部シンボル未解決 LNK2001 今windowsXP32bitからwindowsXP64bitPCでのデバッグを行おうとしています。 開発環境VC++2005です。 しかし、32bitPCでは、エラーなどなかったのですが64bitPCだと次のようなエラーが発生しました。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DP8SP_TCPIP" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlay8Address" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlay8Address" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlay8Client" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlay8Client" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultCapture" は未解決です。 5>MainteDlg.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultCapture" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultPlayback" は未解決です。 5>MainteDlg.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultPlayback" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlayVoiceClient" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlayVoiceClient" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "PIN_CATEGORY_PREVIEW" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_IBasicVideo" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "CLSID_VideoInputDeviceCategory" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "CLSID_SystemDeviceEnum" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_ICreateDevEnum" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_IMediaControl" は未解決です。 とエラーがでています。 一応構成マネージャーの設定は、64x設定しています 何か設定などたりないのでしょうか? よろしくお願いします。

  • VC6.0でエラー

    環境:winNT4.0,vc6.0 コンソールアプリケーション作成でデバックモードではエラー、警告は、出ないのですが リリースモードで下記のようなエラーがでます。 エラーを消すにはどうしたらよいのでしょうか? 宜しくお願いします。 --------------------構成: muktc - Win32 Release-------------------- リンク中... muktc.obj : error LNK2001: 外部シンボル "_WSACleanup@0" は未解決です muktc.obj : error LNK2001: 外部シンボル "_WSAStartup@8" は未解決です muktc.obj : error LNK2001: 外部シンボル "_WSAGetLastError@0" は未解決です muktc.obj : error LNK2001: 外部シンボル "_gethostname@8" は未解決です muktc.obj : error LNK2001: 外部シンボル "_NetRemoteTOD@8" は未解決です Release/muktc.exe : fatal error LNK1120: 外部参照 5 が未解決です。 link.exe の実行エラー muktc.exe - エラー 6、警告 0

  • VC++6.0からVC++.NET2005へ移植

    VC++6.0で作成したプログラムをVC++.NET2005に移植しました。 ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。 ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。 どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。

  • 「外部シンボル "_DirectDrawCreate@12" は未解決」って???

    外国のサイトで拾ってきたVisual C++のソースコードをコンパイルしたら 次のようなエラーが出ました。 --------------------------------- (1) test.obj : error LNK2001: 外部シンボル "_DirectDrawCreate@12" は未解決です (2) nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__endthreadex" は未解決です (3) nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__beginthreadex" は未解決です (4) Debug/prog.exe : fatal error LNK1120: 外部参照 3 が未解決です。 (5) link.exe の実行エラー --------------------------------- 特に、(1)~(3) の意味がよく分かりません。 Readmeを見ると、「コンパイルすればいい」としか書いてないのですが、、、 もし原因がわかったらお願いします。

  • VC++プログラムについて、お願いします。

    自作プログラムをできた!と思い、ビルドしたのですが(「MFCを使用しない」で作っています)。 「 リンク中... LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/Sample.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー Sample.exe - エラー 2、警告 0 」 どうしてもリンクがうまくいかないようです。 プログラム的には問題が無いと思うのですが、この場合は何が悪いのか、教えて下さい。 帰れないものですいません、お願い致します。

専門家に質問してみよう