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!!


Anmelden zum Antworten