warning: converting NULL to non-pointer type



  • Hallo zusammen, ich wollte mit meinem compiler dev-c/c++ v.4.0 den quellcode von pronix.de um ein einfaches fenster zu erstellen kompilieren, hier der code:

    #include <windows.h>
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    LPCSTR lpszAppName = "AppName";
    LPCSTR lpszTitle   = "Meine erste Applikation";
    
    int APIENTRY WinMain(HINSTANCE hInstance,
               HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
    
       HWND       hWnd;
       MSG        msg;
       WNDCLASSEX   wc;
    
       wc.cbSize        =  sizeof(WNDCLASSEX);
       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 =  lpszAppName;
       wc.lpszMenuName  =  lpszAppName;
       wc.hIconSm       =  LoadIcon(NULL, IDI_APPLICATION);
    
       if( RegisterClassEx(&wc) == 0)
          return 0;
    
       hWnd = CreateWindowEx(NULL,
                             lpszAppName,
                             lpszTitle,
                             WS_OVERLAPPEDWINDOW,
                             0,
                             0,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             NULL,
                             NULL,
                             hInstance,
                             NULL);
    
       if( hWnd == NULL)
          return 0;
    
       ShowWindow(hWnd, iCmdShow);
       UpdateWindow(hWnd);
    
       while (GetMessage(&msg, NULL, 0, 0) > 0)
       {
          TranslateMessage(&msg);
          DispatchMessage(&msg);
       }
       return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT umsg, WPARAM wParam, LPARAM lParam)
    {
       switch (umsg)
       {
       case WM_DESTROY:
          {
             PostQuitMessage(0);
             return 0;
          }
       }
       return DefWindowProc(hWnd, umsg, wParam, lParam);
    }
    

    bei mir erscheint immer die fehlermeldung warning: converting NULL to non-pointer type und der source wird nicht compiliert.
    die fehlermeldung wird auf zeile 43 bezogen in der folgendes steht:

    hWnd = CreateWindowEx(NULL,
                             lpszAppName,
                             lpszTitle,
                             WS_OVERLAPPEDWINDOW,
                             0,
                             0,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             NULL,
                             NULL,
                             hInstance,
                             NULL);
    

    das ist die unterste zeile mit dem "NULL);".
    ich kann mir selber nicht weiterhelfen, hat jemand eine ahnung?

    grüsse, raff



  • Versuch's mal mit 0 anstatt NULL beim ersten Parameter 😉
    Aber wenn du die erweiterten Window-Styles eh nicht verwendest kannst du auch gleich CreateWindow verwenden



  • hmm...wieso ist das denn so?
    also fehlermeldung wird nicht mehr gezeigt, jetzt zeigt der compiler:
    undefined reference to `GetStockObject@4'
    und der source wird immer noch nicht kompiliert...



  • raff schrieb:

    hmm...wieso ist das denn so?

    Weil dwExStyle kein Pointer ist sondern ein DWORD (32-bit unsigned integer).
    Aber das ist ja auch nur eine Warnung und kein Fehler 😉

    raff schrieb:

    also fehlermeldung wird nicht mehr gezeigt, jetzt zeigt der compiler:
    undefined reference to `GetStockObject@4'
    und der source wird immer noch nicht kompiliert...

    Er hat wohl nur deswegen nicht kompiliert :p Hast du auch Gdi32.lib gelinkt?!



  • also in C:\Dev-C++\Lib hab ich die datei gdi32.def mit dem inhalt gefunden:

    LIBRARY GDI32.dll
    EXPORTS
    [...]
    GetStockObject@4
    [...
    

    die Zeile GetStockObject@4 ist ja auch zu finden..sagt mir aber absolut nichts.
    im dev-c++ ist der pfad zu den libraries mit C:\Dev-C++\Lib\ richtig gelinkt.

    edit by flenders: Poste doch bitte in Zukunft keine so ewig langen Listen ⚠



  • Jo, und hast Du dem Linker gesagt er soll die gdi32.lib einbinden?



  • also, wieso redet ihr von gdi32.lib und bei mir heisst die gdi32.def (keine *.lib bei mir) und muss ich dem linker noch explizit sagen wo was ist, musste ich bis jetzt nie, wenn ja, wieso und wo?

    gruss, raff


Anmelden zum Antworten