Hello world Problem



  • #include <windows.h>
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
        static TCHAR szAppName[]=TEXT("HelloWin");
        HWND hwnd;
        MSG msg;
        WNDCLASS wndclass;
        wndclass.style=CS_HREDRAW|CS_VREDRAW;
        wndclass.lpfnWndProc=WndProc;
        wndclass.cbClsExtra=0;
        wndclass.cbWndExtra=0;
        wndclass.hInstance=hInstance;
        wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
        wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
        wndclass.hbrBackground=(HBRUSH) GetStockObject (WHITE_BRUSH);
        wndclass.lpszMenuName=NULL;
        wndclass.lpszClassName=szAppName;
    
        hwnd=CreateWindow (szAppName,                            //Name der Fensterklasse
                           TEXT("Das erste echte Programm!"),    //Fenstertitel
                           WS_OVERLAPPEDWINDOW,                  //Fensterstil
                           CW_USEDEFAULT,                        //X_Position des Fensters
                           CW_USEDEFAULT,                        //Y_Position des Fensters
                           CW_USEDEFAULT,                        //Fensterbreite
                           CW_USEDEFAULT,                        //Fensterhöhe
                           NULL,                                 //Übergeordnetes Fenster
                           NULL,                                 //Menü
                           hInstance,                            //Programm_ID
                           NULL);                                //zus. Parameter
    
        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)
    {
        HDC hdc;
        PAINTSTRUCT ps;
        RECT rect;
    
        switch (message)
        {
            case WM_CREATE:
                PlaySound (TEXT("hellowin.wav"),NULL, SND_FILENAME|SND_ASYNC);
                return 0;
            case WM_PAINT:
                hdc=BeginPaint(hwnd, &ps);
                GetClientRect(hwnd, &rect);
                DrawText (hdc, TEXT ("Hallo, Win XP Professional"), -1, &rect,
                          DT_SINGLELINE|DT_CENTER|DT_VCENTER);
                EndPaint (hwnd, &ps);
                return 0;
                case WM_DESTROY:
                    PostQuitMessage (0);
                    return 0;
        };
        return DefWindowProc (hwnd, message, wParam, lParam);
    };
    
    [Linker error] undefined reference to `GetStockObject@4'
    
    [Linker error] undefined reference to `PlaySoundA@12'
    

    Achja: HelloWin.wav gibts natürlich, ich benutze dev-cpp



  • Für Probleme mit Compilern haben wir ein eigenes Forum.

    Du hast vermutlich vergessen ein oder zwei libs mitzulinken. PlaySound benötigt winmm.lib und GetStockObject gdi32.lib.



  • Dieser Thread wurde von Moderator/in cd9000 aus dem Forum WinAPI in das Forum Andere Compiler verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Schon mal gut zu wissen, dass das am compiler und net am code liegt 😃 , tut mir leid. Und wie kann ich die Libs mitlinken?



  • probiers mal mit #pragma comment(lib,"gdi32.lib")
    kann sein dass das bei dir nicht funktioniert weil ich visual c++ benutz 🙄



  • Funzt auch net! So ein mist, und das schon bei den Grundzügen der WinApi...



  • Achja, bei Projekt, Optionen kann mann ja angeben welche libs mitgelinkt werden, aber winmm.lib und gdi32.lib gibts im verzeichnis lib net! Muss ich die erst runter laden? Oder wo sin die versteckt?



  • such halt auf deiner pladde oder im internet...kannst aber natürlich auch ne netmeetingsession aufmachen, und hoffen, dass es jemand aus dem Forum für dich auf deinem Rechner tut... 🤡



  • Timm schrieb:

    probiers mal mit #pragma comment(lib,"gdi32.lib")
    kann sein dass das bei dir nicht funktioniert weil ich visual c++ benutz 🙄

    Wozu ist #pragma???

    Überall list man nur das es sich um etwas für den Präprozessor handelt, aber nie was es macht.



  • Hallo,

    die heissen beim MinGW-Compiler libgdi32.a und libwinmm.a. Einfach ins lib-Verzeichnis von Dev-Cpp schauen.

    MfG
    tuküe



  • danke, versuchs mal heut nachmittag!



  • unwissender_User schrieb:

    Wozu ist #pragma???

    #pragma ist eine Präprozessor-Direktive. Was sie genau bewirkt, hängt aber völlig vom Compiler ab.
    Der Visual-C++-Compiler interpretiert #pragma comment(lib, "gdi32.lib") eben als Angabe, diese Lib mitzulinken.
    Man kann mit #pragma noch viel mehr anstellen als libs linken, s. Doku. 🙂


Anmelden zum Antworten