Eclipse3.0.2 + CDT2.0.1の環境でWindowsプログラムを作っているのですが、コンパイル時にGetStockObject()で未定義というエラーになり、コンパイルが通りません。
GetStockObject()を調べてみたところ、API関数のようなので、宣言はいらないと思っているのですが、間違いでしょうか?どうしたら、コンパイルが通るようになるでしょうか?教えてください。
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
char szClassNme[] = "ウィンドウクラス・ネーム";
//メイン関数
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS myProg;
if (!hPrevInstance) {
myProg.style=CS_HREDRAW | CS_VREDRAW;
myProg.lpfnWndProc=WndProc;
myProg.cbClsExtra=0;
myProg.cbWndExtra=0;
myProg.hInstance=hInstance;
myProg.hIcon=NULL;
myProg.hCursor=LoadCursor(NULL, IDC_ARROW);
//myProg.hbrBackground=GetStockObject(WHITE_BRUSH);
myProg.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
myProg.lpszMenuName=NULL;
myProg.lpszClassName=szClassNme;
if (!RegisterClass(&myProg))
return FALSE;
}
hWnd = CreateWindow(szClassNme,
"あちょちょ",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}
No.2ベストアンサー
- 回答日時:
メッセージを見たところ、コンパイル時にエラーは発生していません。
リンク時にエラーが発生していますので、必要なライブラリを指定し忘れているのではないでしょうか。Microsoft C++ですとkernek32.lib, user32.lib, gdi32.libの指定が必要で、GetStockObjectはgdi32.libの中に入っています。MinGwでのライブラリファイル名は分かりませんが、これに相当するライブラリファイルをどこかで指定する必要があるかと思います。
No.1
- 回答日時:
使用しているコンパイラと、出ているエラーメッセージの正確な内容を補足いただけるでしょうか。
この回答への補足
コンパイラはMinGwを使用しています。
上記ソースでコンパイルすると下記エラーが発生しました。
**** プロジェクト FS_Win32Api の構成 Debug の インクリメンタル・ビルド ****
make -k -mwondows all
make: Entering directory `/d/Projects/FS_Win32Api/Debug'
ビルドするファイル: ../FS_Win32Api.cpp
g++ -O0 -g3 -Wall -c -fmessage-length=0 -oFS_Win32Api.o ../FS_Win32Api.cpp
ビルド完了: ../FS_Win32Api.cpp
ビルド・ターゲット: FS_Win32Api.exe
g++ -o FS_Win32Api.exe FS_Win32Api.o
FS_Win32Api.o(.text+0x85): In function `WinMain':
make: Leaving directory `/d/Projects/FS_Win32Api/Debug'
D:/Projects/FS_Win32Api/Debug/../FS_Win32Api.cpp:37: undefined reference to `GetStockObject@4'
collect2: ld returned 1 exit status
make: *** [FS_Win32Api.exe] Error 1
make: Target `all' not remade because of errors.
プロジェクト FS_Win32Api のビルドが完了しました。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
C言語でヘッダファイルにグロー...
-
Makefile作成時の拡張子.oとは?
-
1 つ以上の複数回定義されてい...
-
セミコロンについて
-
[c++] <pthread.h>がinclude で...
-
エクセルVBAではRound...
-
” OS ビルド ” の意味が分か...
-
ILSpyで、デコンパイルできない。
-
pyc 編集 閲覧
-
windowsでLinuxで作成したソー...
-
複素数<complex.h>のErrorに関して
-
漢字のコメントをはずすとコン...
-
クリティカルエラー Expressio...
-
スタティックライブラリファイ...
-
「fatal error C1189」を回避す...
-
LoadLibraryについて
-
ソースコードの隠蔽
-
Visual Studio .net ヘッダーフ...
-
GetStockObject()で未定義エラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
” OS ビルド ” の意味が分か...
-
1 つ以上の複数回定義されてい...
-
「fatal error C1189」を回避す...
-
エクセルVBAではRound...
-
Makefile作成時の拡張子.oとは?
-
C言語でヘッダファイルにグロー...
-
ILSpyで、デコンパイルできない。
-
セミコロンについて
-
<math.h>があるのにsqrtが・...
-
クリティカルエラー Expressio...
-
外部シンボル "_main"は未解決です
-
マクロ コンパイルがグレーバック
-
[c++] <pthread.h>がinclude で...
-
C++コンパイル時に『 C1083: in...
-
【VC++6.0(MFC)】警告「LINK : ...
-
ビルドとリビルドの違いを教え...
-
コンパイルエラー:ユーザ定義...
-
VB6で開発中…標準モジュール間...
-
コンパイル??
おすすめ情報