Linker Error
-
In folgendem Code:
#define STRICT #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); const char szAppName[] = "Textausgabe im Anwendungsbereich"; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MSG msg; HWND hWnd; WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); wc.lpszClassName = szAppName; wc.lpszMenuName = NULL; RegisterClass(&wc); hWnd = CreateWindow( szAppName, szAppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_PAINT: { PAINTSTRUCT ps; HDC hDC; const char szText[] = "Hallo, dies ist der Text."; hDC = BeginPaint(hWnd, &ps); { TextOut(hDC, 50, 50, szText, sizeof(szText) - 1); } EndPaint(hWnd, &ps); return 0; } case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); }
meldet der Linker immer:
"undefined reference to 'GetStockObject@4'"
"undefined reference to 'TextOutA@20'""GetStockObject" kommt hier vor:
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
"TextOutA" kommt gar nicht vor, nur TextOut:
TextOut(hDC, 50, 50, szText, sizeof(szText) - 1);
Das ganze unter WinXp und 98, Compiler Dev-C++.
Wo liegt der Fehler?
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum WinAPI in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
das
#define STRICT
kenne ich nicht, kannst es ja mal weglassen
-
@Webster: Du mußt irgendwo in den Linker-Optionen die richtigen Libs mit angeben - beide Funktionen erfordern die "gdi32.lib".
(PS: TextOut ist übrigens nur ein Makro, das je nach UNICODE-Einstellungen entweder auf TextOutA() (für ANSI-Strings) oder TextOutW() (für UNICODE-Strings) gemappt wird ;))
@kekse: Laut MSDN sorgt STRICT dafür, daß der MS-Compiler genauere Typkontrollen einschaltet. Ich weiß nicht, wie Dev-C++ darauf reagiert, aber auf jeden Fall hat das nichts mit dem Problem zu tun.
-
Die angezeigten Fehler sind Compilerabhängig, d.h. ein Compiler sagt kein
Error, der Andere mehrere.probier mal:
wc.hbrBackground = (HBRUSH) (WHITE_BRUSH);
ich hoffe ich erinnere mich richtig.
MfG
-
ich kann dir nur versichern, dass dei Cod richtig ist!! Habs getestet!! Es liegt am Compiler!!