人生のプチ美学を教えてください!!

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);
}

A 回答 (2件)

メッセージを見たところ、コンパイル時にエラーは発生していません。

リンク時にエラーが発生していますので、必要なライブラリを指定し忘れているのではないでしょうか。

Microsoft C++ですとkernek32.lib, user32.lib, gdi32.libの指定が必要で、GetStockObjectはgdi32.libの中に入っています。MinGwでのライブラリファイル名は分かりませんが、これに相当するライブラリファイルをどこかで指定する必要があるかと思います。
    • good
    • 1
この回答へのお礼

そうなんですね。それをキーにネットで調べてみます。メドが立っただけでも、助かりました。
ありがとうございました。

お礼日時:2005/09/24 11:23

使用しているコンパイラと、出ているエラーメッセージの正確な内容を補足いただけるでしょうか。

この回答への補足

コンパイラは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 のビルドが完了しました。


よろしくお願いします。

補足日時:2005/09/23 11:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!