未解決の外部シンボル

このQ&Aのポイント
  • C言語でWinapiを使おうとした際に、未解決のシンボルのエラーが発生しました。
  • 具体的には、__imp__MessageBoxA@16というシンボルが関数_WinMain@16で参照されており、外部1が未解決というエラーメッセージが表示されました。
  • Windows XP SP3でVisual Studio C++ 2008 Express Editionを使用しています。解決方法を教えてください。
回答を見る
  • ベストアンサー

未解決の外部シンボル

C言語は少しやっていたことがあり このたび、Winapiをしてみようと はじめました。 参考に見つけてきたプログラム #include <windows.h> #include <tchar.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd) { MessageBox( NULL, _T("Hello World"), _T("メッセージ"), MB_OK ); return 0; } をコンパイルしようとしたところ error LNK2019:未解決のシンボル __imp__MessageBoxA@16が関数_WinMain@16で 参照されました。 fatal errorLNK1120:外部1が未解決です。 と出てきます。 どうすればいいのでしょうか・・・ 困っています誰か助けてください Windows XP SP3 Visual Studio C++ 2008 Express Edition

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

スタートメニューから「Visual Studio 2008 コマンド プロンプト」のようにもので起動しているんですよね? # 2008 Express Editionは自宅のに入れていないので… >Includeフォルダに、Windows.hが存在していないのですが・・・ 起動したコマンドプロンプトで、SETコマンドを実行すると、 設定されている環境変数が表示されます。 INCLUDE環境変数でWINDOWS.Hのある場所が指定されているでしょう。 さていないとリンカエラーではなくコンパイルエラーです。 >cl test.c でコンパイルしました。 User32.libがリンクされていません。 cl test.c user32.lib として下さい。 ちなみに、環境変数LIBで記述されている先にuser32.libがあるハズです。 # この程度なら問題ないでしょうけど…プロジェクトを作成した方が後々扱いやすくなるかと思います。 # なお、1つのプロジェクトに同じ名前の関数は複数おけませんのでご注意を。 # http://oshiete1.goo.ne.jp/qa5126302.html # http://oshiete1.goo.ne.jp/qa5075853.html # http://oshiete1.goo.ne.jp/qa5061830.html など…

taka1yuki
質問者

お礼

user32.libをつけるとコンパイルできました!! どうもありがとうございます。 ほかにもいろいろ教えていただき感謝しています。

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

windows.hは私の環境では C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include にありました Visual C++では $(WindowsSdkDir)\include としてインクルードディレクトリの1つに登録してあるはずです

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>をコンパイルしようとしたところ >error LNK2019:未解決のシンボル __imp__MessageBoxA@16が関数_WinMain@16で 参照されました。 >fatal errorLNK1120:外部1が未解決です。 どのようにコンパイルしました? コマンドラインから…でしょうか? http://msdn.microsoft.com/ja-jp/library/cc410914.aspx >インポートライブラリ:User32.lib を使用 ということで、User32.libもリンクしないといけませんが指定していますか?

taka1yuki
質問者

補足

cl test.c でコンパイルしました。 どうも Includeフォルダに、Windows.hが存在していないのですが・・・

関連するQ&A

  • C言語で黒い画面が出る

    gcc使ってC言語を勉強していますが、スタートmainをwindowsにしても黒い画面が出てきます。これを消すことはできませんか。やりたいことは単にメッセージボックスを表示して簡単なファイル入出力するだけです。ソースコードは以下 #include <windows.h> #include <tchar.h> int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MessageBox( NULL, _T("Hello, Windows!"), _T("sample"), MB_OK); return 0; }

  • 「外部シンボルが未解決」について教えてください

    BCCを使ってます。windowsのプログラムで、『外部シンボル 'MyCreateFontが未解決』と言うメッセージが出たのですが、リンクエラーなのでしょうか? また、『外部シンボル○○が未解決』と表示された場合、どのような処置をすればいいですか。アドバイスをお願いします。 D:\borland\bcc55\lesson>bcc32 -W -w-8057 timer.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland timer.cpp: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル 'MyCreateFont(int, unsigned long, const char *)' が未解決(D:\BORLAND\BCC55\LESSON\TIMER.OBJ が参照 ) こちらが、宣言の部分です。 #include <windows.h> #define ID_MYTIMER 100 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE, int); HFONT MyCreateFont(int, DWORD, LPCTSTR); char szClassName[] = "clock"; //ウィンドウクラス int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow)

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

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

  • Win32APIについて

    #include <windows.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd) { return 0; } のようなプログラムをビルドすると LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/Cpp1.exe : fatal error LNK1120: 外部参照 1 が未解決です。 が出ます。 ちなみにコンパイル環境はMicrosoft Visual C++ 5.0です。

  • _tcscat がうまくいきません(VC++2008)

    以下のように入力し、ビルドすると 「error C2664: 'wcscat' : 1 番目の引数を 'LPCTSTR' から 'wchar_t *' に変換できません。」となり、うまくいきません。 ダイアログに「テストです。」と表示させたいです。一体どうしたらよいのでしょうか?ご教授ください~。 環境は、WindowsXP SP2 & Visual C++ 2008 Express Edition です。 なお、文字セットは「Unicode 文字セットを使用する」に設定してあります。 //----------------------------------------------------------- #include <Windows.h> #include <tchar.h> INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE,LPSTR,INT){ LPCTSTR str1 = _T("テスト"); LPCTSTR str2 = _T("です。"); _tcscat( str1, str2 ); MessageBox(NULL,str1,_T("Dialog"),MB_OK); return 0; }

  • VS2010 C++ エラーについて

    Visual Studio2010のC++を使用しているのですが、DLLにメッセージボックスを使用したいと思っています。 .cppに #include <windows.h> int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance , LPSTR lpCmdLine, int cmdShow) { MessageBox(NULL,"○○○","△△△",MB_OK); return 0; } 上記のようなソースコードを使って見ると、○○○と△△△の部分でエラーを吐きます。 どのようにすれば改善されるか教えてください。

  • Windowsアプリケーションをどうしても作りたいのですが

    /* OS==XP コンパイラー==Borland C++5.5 */ #include<windows.h> int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { return 0; } で Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照) となるのでexeファイルができません。 解決法を是非教えてください。 C言語歴2日+1H

  • Windowsゲームプログラミングを始めたのですが

    最近ゲームのプログラムを始めた者です。 C言語でWindowsプログラムを書き始めたのですが、最初の宣言を行った時点でコンパイル時に大量のエラーが出てしまいました。 ↓が内容です。 #include<windows.h> #include<stdio.h> #include<stdlib.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ } 使用OSはVistaです。 急いではいないので、どなたか解決法を知っている方、ご指導お願いします。

  • HINSTANCEの型

    LPSTR は char* なので、 int WINAPI WinMain(HINSTANCE hInstance ,HINSTANCE hPrevInstance , LPSTR lpCmdLine ,int nCmdShow ) を int WINAPI WinMain(HINSTANCE hInstance ,HINSTANCE hPrevInstance , char* lpCmdLine ,int nCmdShow ) と書き換えてもコンパイルできます。 HINSTANCEはvoid *型だという記述を見たのですが、void *で書き換えてもエラーがでてしまいます。 どうしたらよいのでしょうか。

  • VCでバッチソフト

    勉強でWindowsで動くテキストを加工するツールを作成したいのですが、 一瞬黒い画面が現れるので、 Visual C++ → Win32 → Win32コンソールアプリケーション → コンソールアプリケーション → 空のプロジェクトではなく Visual C++ → Win32 → Win32コンソールアプリケーション → Windowsアプリケーション → 空のプロジェクトで合っていますよね。 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd) を宣言するのですが、引数はどうやって渡すのですか? またお勧めのVCでC言語を勉強できる本があれば教えてください。

専門家に質問してみよう