
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
エクセルVBAではRound...
-
C言語でmからnまでの合計を求め...
-
VBAを何回も作り直して、容量が...
-
「fatal error C1189」を回避す...
-
C言語でヘッダファイルにグロー...
-
Makefile作成時の拡張子.oとは?
-
ILSpyで、デコンパイルできない。
-
Visual Studio .net ヘッダーフ...
-
セミコロンについて
-
外部シンボル "_main"は未解決です
-
プリコンパイルエラーについて
-
Fortran : 複数の.fファイルの...
-
分割ファイルのコンパイル
-
漢字のコメントをはずすとコン...
-
VB6で開発中…標準モジュール間...
-
<math.h>があるのにsqrtが・...
-
Mac C Undefined x86_64
-
コンパイルエラー:ユーザ定義...
-
lccコマンドについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
VBAを何回も作り直して、容量が...
-
エクセルVBAではRound...
-
C言語でヘッダファイルにグロー...
-
1 つ以上の複数回定義されてい...
-
「fatal error C1189」を回避す...
-
Makefile作成時の拡張子.oとは?
-
外部シンボル "_main"は未解決です
-
<math.h>があるのにsqrtが・...
-
ILSpyで、デコンパイルできない。
-
クリティカルエラー Expressio...
-
【VC++6.0(MFC)】警告「LINK : ...
-
マクロ コンパイルがグレーバック
-
セミコロンについて
-
複数のサブディレクトリを一緒...
-
C言語のコンパイルができません
-
PRO*C コンパイルエラー
-
ExcelVBAで『ByRef 引数の型が...
-
コンパイルエラー:ユーザ定義...
-
プリコンパイルエラーについて
おすすめ情報