WIN32APIとC++のコンパイルでメッセージボックス表示のプログラムソースをコンパイルする方法

このQ&Aのポイント
  • WIN32APIとC++のコンパイルでメッセージボックス表示のプログラムソースをコンパイルする方法を教えてください。
  • コピペしたプログラムソースをコンパイルする際に、未解決の外部シンボル __imp__MessageBoxA@16 が関数_WinMain@16で参照されました。
  • どのようにすればこのエラーを解決できますか?
回答を見る
  • ベストアンサー

WIN32APIとかC++のコンパイルについて

http://www.geocities.jp/ky_webid/win32c/001.html のメッセージボックスに表示させるというプログラムソースをコピペして、コマンドからコンパイルしたら、 C:\study>cl wintest1.c Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. wintest1.c Microsoft (R) Incremental Linker Version 9.00.21022.08 Copyright (C) Microsoft Corporation. All rights reserved. /out:wintest1.exe wintest1.obj wintest1.obj : error LNK2019: 未解決の外部シンボル __imp__MessageBoxA@16 が関数 _WinMain@16 で参照されました。 wintest1.exe : fatal error LNK1120: 外部参照 1 が未解決です。 と、怒られてしまったのですが、どの様にすればいいのでしょうか?

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

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

>wintest1.obj : error LNK2019: 未解決の外部シンボル __imp__MessageBoxA@16 が関数 >_WinMain@16 で参照されました。 >wintest1.exe : fatal error LNK1120: 外部参照 1 が未解決です。 >と、怒られてしまったのですが、どの様にすればいいのでしょうか? リンク時にライブラリも指定してください。 MSDNによると… >Minimum DLL Version:user32.dll >Header:Declared in Winuser.h, include Windows.h >Import library:User32.lib >Minimum operating systems:Windows 95, Windows NT 3.1 >Unicode:Implemented as ANSI and Unicode versions. とのことなので、User32.libもリンクする必要があります。

glarelance
質問者

お礼

リンクってのがよく分んなかったんですが。 cl wintest1.c User32.lib ってしたら出来ました。 ありがとうございました。

関連するQ&A

  • うまくコンパイルできません

    初心者です。 家のPCでC言語のプログラミングをやろうと思ってVisual C++ 2008というフリーソフトをダウンロードしました。 Cプログラミングの本に書いてあるとおりソースファイルを作ってコンパイルしてみたのですがどうしてもうまく行かないので質問させていただきます。 エラー内容は次の通りです。 C:\cwork>cl test1.c Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. test1.c Microsoft (R) Incremental Linker Version 9.00.21022.08 Copyright (C) Microsoft Corporation. All rights reserved. /out:test1.exe test1.obj LINK : fatal error LNK1104: ファイル 'kernel32.lib' を開くことができません。 以上です。何が悪いのかわかる方教えてください。 何か足りないところがあれば言って下さい。よろしくお願いします。

  • VC++で正常にコンパイルできません(マイクロソフトのサンプルなんですが)

    こんにちは。 VC++の勉強を兼ねてマイクロソフトのサイトから色々なサンプルを入手し、コンパイルしているのですが、下記のサンプルはエラーがでてしまいます。 リンクのエラーみたいなのですが、どのように解決すれば良いか、ご存知の方がいらっしゃいましたら教えていただけないでしょうか? ちなみに下記のサンプルをtest.cppと名前を付けて保存し、コマンドプロンプトで下記の通り実行しています。 cl /EHsc test.cpp ■エラーがでるサンプル http://msdn.microsoft.com/library/en-us/wmisdk/wmi/example__getting_wmi_data_from_the_local_computer.asp タイトル:Example: Getting WMI Data From the Local Computer ---エラー内容 ここから▼--- C:\VS2005>cl /EHsc test.cpp Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. test.cpp Microsoft (R) Incremental Linker Version 8.00.50727.42 Copyright (C) Microsoft Corporation. All rights reserved. /out:test.exe test.obj test.obj : error LNK2019: 未解決の外部シンボル "wchar_t * __stdcall _com_util::C onvertStringToBSTR(char const *)" (?ConvertStringToBSTR@_com_util@@YGPA_WPBD@Z) が関数 "public: __thiscall _bstr_t::Data_t::Data_t(char const *)" (??0Data_t@_bs tr_t@@QAE@PBD@Z) で参照されました。 test.exe : fatal error LNK1120: 外部参照 1 が未解決です。 ---エラー内容 ここまで▲--- ■利用環境 WindowsXP HomeEdition SP2 Microsoft Visual C++2005 Express Edition Windows® Server 2003 SP1 Platform SDK 足りない情報等がございましたら、ご指摘いただけると幸いです。

  • .cppファイルのコンパイルについて

    初心者ですがお願いします。 Sample.cppを改造しています。 コンパイルするに当たりコマンドプロンプトを利用しています。 c:\cwork>cl sample.cpp Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.0050727.42 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. sample.cpp c:\cwork\comm.h(24) : fatal error C1083:include ファイルを開け ません。'windows.h':No such file or directory ファイルを開けません。'windows.h' を解消するにはどうすれば良いでしょうか

  • 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です。

  • 著作権の表示

    よくソフトだけでなく、冊子などでも同様ですが著作権表示を見かけます。 (ソフトではバージョン情報など) この表示に関して「書き方」の決まりのようなものはあるのでしょうか。 いろんなソフトでいろんな表示形式になっています。 例えば、 Copyright (C) 1999 ○○Corporation. Copyright (C) 1999-2006 ○○Corporation. Copyright (c) 1999-2006 ○○Corporation. All rights reserved. Copyright 2006 ○○Corporation. All rights reserved. みたいな感じです。 決まりみたいなものがあれば教えてください。

  • C++コンパイル時ファイル名文字化け D4024

    開発環境 visual studio 2013 ソースコード // ConsoleApplication2.cpp : Defines the entry point for the console application. // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; } コンパイル結果 1>------ Build started: Project: ConsoleApplication2, Configuration: Debug Win32 ------ 1> Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86 1> Copyright (C) Microsoft Corp 1984-1998. All rights reserved. 1> 1> cl / 1> 1>CL : Command line warning D4024: unrecognized source file type '/', object file assumed 1> Microsoft (R) Incremental Linker Version 12.00.21005.1 1> Copyright (C) Microsoft Corporation. All rights reserved. 1> 1> /out:.exe 1>LINK : warning LNK4001: no object files specified; libraries used 1>LINK : warning LNK4068: /MACHINE not specified; defaulting to X86 1>LINK : fatal error LNK1561: entry point must be defined ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== エラーリスト Warning 1 warning D4024: unrecognized source file type '/', object file assumed Warning 2 warning LNK4001: no object files specified; libraries used Warning 3 warning LNK4068: /MACHINE not specified; defaulting to X86 Error 4 error LNK1561: entry point must be defined 自分で何時間リサーチしてみて、収穫なし、解決できず ファイル名、ファイルアドレスは全部半角英文字、スペースなし セーブ時の文字コードをunicodeにしても治らず ギブアップです、もし解決策がわかる方がいらっしゃるならぜひお願いいたします! どうしても治らなかったらVS2013を再インストールしてみるつもりです それでもだめならeclipseにもどります

  • SingleCompile.vimでmsvc110

    C++の入門書を読んでプロコンの勉強をし始めた程度のプログラミング能力の者です. 最近vimを使い始め, http://d.hatena.ne.jp/osyo-manga/20110530/1306715525 http://d.hatena.ne.jp/osyo-manga/20110302/1299080946 ここを見ながらこれまで使っていたVisualStudio2012のコンパイラをvimのプラグインSingleCompileに対応させました. 現バージョンではvs2012に非対応だったため, 設定ファイルに存在するvs2010のテンプレートをコピペ,適宜修正し対応させました. :SCCompile としてみると, :!cl -o test C:\ ... \test.c >C:\Users\ユーザー名\AppData\Local\Temp\VIeBC16.tmp 2>&1 と表示され,一応コンパイルには成功するのですが, :cope で見てみると || Microsoft(R) C/C++ Optimizing Compiler Version 17.00.50727.1 for x86 || Copyright (C) Microsoft Corporation. All rights reserved. || || cl : コマンド ライン warning D9035 : オプション 'o' の使用は現在推奨されていません。今後のバージョンからは削除されます。 || test.c || Microsoft (R) Incremental Linker Version 11.00.50727.1 || Copyright (C) Microsoft Corporation. All rights reserved. || || /out:test.exe || /out:test.exe || test.obj と表示されます. 今までVisualStudio2012ではリンクやコンパイルの流れがどのようなものなのかわからずに使っていたので, 「cl : コマンド ライン warning D9035 : オプション 'o' の使用は現在推奨されていません。今後のバージョンからは削除されます。」 の意味が意味が理解できません. 解決策を教えてください.

  • C++でのエラー LNK2001

    C++でプログラミング中ビルドしたところ以下のようなエラーが出ました。解決方法がわかりません。どのようにしたら解決できるのでしょうか? ---------------------------------------------------------------- コンパイル中... sample01.cpp リンク中... sample01.obj : error LNK2001: 外部シンボル "__imp__dispose_library" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_copyright_information" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_version_information" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__initialize_library" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__close_reader_writer" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_last_error_types" は未解決です Debug/Sample01.exe : fatal error LNK1120: 外部参照 6 が未解決です。 link.exe の実行エラー

  • Copyright(c) 2006 ○○ All Rights Reserved.の表記意味

    Copyright(c) 2006 ○○ All Rights Reserved. Copyright(c) 2006 ○○ All rights reserved. のどちらが正しいのでしょうか。「R」は大文字か小文字のどちらかでしょうか 又、2006の部分は、年数がはいるようですが、いつからいつまでを表すのでしょうか。教えてください。

  • DB2付きのC言語がコンパイルできません。

    CはMicrosoftVisualStudio2012 DBはIBM DB2 です。 同じ環境でコンパイル実行できていたのに、 PCがおかしくなったのでフォーマットして入れなおしたらコンパイルができなくなりました。 よろしくおねがいします。 ソースはこちらです。 #include <stdio.h> exec sql include sqlca; void main() { exec sql connect to sample; if(SQLCODE!=0) { printf("SQL CONNECT %d", SQLCODE); } else { exec sql update Test1 set col2 = 'bababa'; if(SQLCODE!=0) printf("SQL UPDATE %d", SQLCODE); } exec sql connect reset; } コンパイルコマンドです db2 connect to sample db2 prep Test11.sqc bindfile db2 bind Test11.bnd cl -Z7 -c -W2 -D_X86_=1 -DWIN32 -I"c:\Program Files\IBM\SQLLIB\include" Test11.c link -debugtype:cv -outTest11.exe %1.obj "c:\Program Files\IBM\SQLLIB\lib\db2api.lib" エラーメッセージです Test11.obj : error LNK2019: 未解決の外部シンボル _sqlaaloc@16 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlacall@20 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlasetdata@24 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlastop@4 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlastrt@12 が関数 _main で参照されました。 Test11.exe : fatal error LNK1120: 5 件の未解決の外部参照

専門家に質問してみよう