tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
12
ZUGRIFFE
252
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    silent12 silent12 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    42
    Hallo
    habe gerade versucht mein erstes C++ Programm zu erstellen, dass in einem Windows-Fenster läuft (besser gesagt einfach das Fenster), aber ich bekomme immer unten die Fehlermeldung (mit Visual Studio C++) Cannot find or open the PDB file.
    Kann mir jemand helfen ?
    Hier der Code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    
    // main_cpp //
     
    #include <Windows.h>
    #include <iostream>
     
    LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
    const char szClassName[] =  "Hallo";
          char szTitle[] = "1.ProgrammGrafics3 Silent1297 2011 ©";
     
     
     
     
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
               LPSTR szCmdLine, int iCmdShow)
     
        {
            WNDCLASSEX WndClassEx;
            HWND hWnd;
            MSG msg;
            WPARAM  wParam;
            LPARAM  lParam;
            UINT umsg;
            
     
            //          Registrierung           //
     
            WndClassEx.cbSize      = sizeof( WndClassEx);
            WndClassEx.style       = CS_NOCLOSE;
            WndClassEx.lpfnWndProc = (WNDPROC)WndProc;
            WndClassEx.cbClsExtra  = NULL;
            WndClassEx.cbWndExtra  = NULL;
            WndClassEx.hInstance   = hInstance;
            WndClassEx.hIcon       = NULL;
            WndClassEx.hCursor     = NULL;
            WndClassEx.hbrBackground = (HBRUSH) (COLOR_BACKGROUND +1);  
            WndClassEx.lpszMenuName = NULL;
            WndClassEx.lpszClassName = szClassName; // C-String
            WndClassEx.hIconSm      =  NULL;
     
            RegisterClassEx ( &WndClassEx );
     
     
            //          Fenster Erstellen          //
     
            hWnd = CreateWindowEx (WS_EX_CLIENTEDGE,
                            szClassName, 
                            szTitle,
                            WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            NULL,
                            NULL,
                            hInstance,
                            NULL);
     
            while( GetMessage ( &msg, hWnd, NULL, NULL) > NULL)
                {
                    TranslateMessage( &msg );
                    DispatchMessage ( &msg );
                };
     
        ShowWindow( hWnd, iCmdShow);
            
                    
            // WINDOW-PROCEDUR -> WNDCLASSEX -> HWND -> MESSAGELOOP
     
     
            return 0;
        }
     
    LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
                {
                    switch (msg)
                        {
                            case WM_QUIT:       //Programm Ende
                                {
                                MessageBox ( NULL,"Programm wurde beendet",
                                            "Programm End", MB_OK);
                                DestroyWindow( hWnd);
                                }
                                break;
     
                            case WM_DESTROY:        //Fenster Ende
     
                                PostQuitMessage(0);
                                break;
     
                            default:
                                return DefWindowProc ( hWnd, msg, wParam, lParam);
                        }
                };

    Würde mich sehr über Hilfen freuen
    silent12
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Wie lautet die Fehlermeldung genau?

    Die .pdb Datei brauchst du nur zum Debuggen. Welche Build-Konfiguration verwendest du (Debug oder Release)? Wie startest du die Anwendung? Versuch mal Strg+F5.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Crash Kid Crash Kid ist offline Mitglied Gold
    Registriert seit
    Jan 2009
    Beiträge
    147
    Also, mit der Fehlermeldung an sich kann ich nicht viel anfangen, weil ich nicht in Visual Studio programmiere. Aber was mir aufgefallen ist, du deklarierst 2x wParam und lParam. Einmal in der Funktion WndProc und dann noch in deinem WinMain. Die Varriable UINT umsg ist mir auch nicht ganz klar. Ich erstelle meine Fenster mit dieser Vorlage:

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    
    LRESULT CALLBACK MainProc(HWND, UINT, WPARAM, LPARAM);  //Hauptfenster
     
    const char szMainname[] = "Hauptfenster";
     
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
        WNDCLASS wc;
        HWND hWnd;
        MSG msg;
     
        wc.style         = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc   = MainProc;
        wc.cbClsExtra    = 0;
        wc.cbWndExtra    = 0;
        wc.hInstance     = hInstance;
        wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
        wc.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(ID_MYICON));
        wc.hbrBackground = CreateSolidBrush(RGB(0, 0, 0));
        wc.lpszClassName = szMainname;
        wc.lpszMenuName  = NULL;
     
        RegisterClass(&wc);
     
        hWnd = CreateWindow(szMainname,
                            szMainname,
                            WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,
                            GetSystemMetrics(SM_CXSCREEN) / 2 - iWindowX / 2,
                            GetSystemMetrics(SM_CYSCREEN) / 2 - iWindowY / 2,
                            iWindowX,
                            iWindowY,
                            NULL,
                            NULL,
                            hInstance,
                            NULL);
     
        ShowWindow(hWnd, iCmdShow);
        UpdateWindow(hWnd);
     
        while(GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
     
        return msg.wParam;
    }
     
    LRESULT CALLBACK MainProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch(message)
        {
            case WM_CREATE:
            {
                //Hier kommen deine Child-Fenster rein
     
                return 0;
            }
     
            case WM_SIZE:
            {
                rect.right  = LOWORD(lParam);
                rect.bottom = HIWORD(lParam);
     
                //Hier plazierst du deine Child-Fenster
     
                InvalidateRect(hWnd, NULL, FALSE);
     
                return 0;
            }
     
            case WM_CLOSE:
            {
                //Eventuell eine MSG-Box
     
                DestroyWindow(hWnd);
     
                return 0;
            }
     
            case WM_DESTROY:
            {
                PostQuitMessage(0);
     
                return 0;
            }
        }
     
        return DefWindowProc(hWnd, message, wParam, lParam);
    }

    grüße
     
    Wenn meine Antwort nützlich bzw. hilfreich war, würde ich mich sehr über eine Bewertung bzw. ein Danke sehr freuen.

    Danke euch


    Programmiere in C, C++ auf Windows XP, Vista und Windows 7
    Spezialisiert auf Netzwerkprogrammierung, WinAPI uvm.

  4. #4
    Avatar von ComFreek
    ComFreek ComFreek ist offline [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.358
    Blog-Einträge
    4
    Hallo silent12,

    ich kann dir schonmal sagen, dass es kein Fehler von deinem Programm ist.
    Die PDB-Datei (Program Database) ist von Visual Studio. Siehe auch hier: http://msdn.microsoft.com/en-us/libr...(v=vs.71).aspx

    Mehr zu Visual Studio kann ich dir leider nicht sagen, eben nur es liegt nicht am Quelltext.
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  5. #5
    silent12 silent12 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    42
    Danke für das Grundgerüstbeispiel, aber bei mir werden dabei mehrere Fehler angezeigt (zB Windowx o.ä.)
    Meine Fehlermeldung sieht so aus:

    "grafic3.exe": "C:\Users\silent12\Documents\#C++\_grafic3\Debug\grafic3.exe" geladen, Symbole wurden geladen.
    "grafic3.exe": "C:\Windows\SysWOW64\ntdll.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\kernel32.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\KernelBase.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\user32.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\gdi32.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\lpk.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\usp10.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\msvcrt.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\advapi32.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\sechost.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\rpcrt4.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\sspicli.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\cryptbase.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\msvcr100d.dll" geladen, Symbole wurden geladen.
    "grafic3.exe": "C:\Windows\SysWOW64\imm32.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\msctf.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\uxtheme.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Program Files (x86)\RocketDock\RocketDock.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "grafic3.exe": "C:\Windows\SysWOW64\psapi.dll" geladen, Cannot find or open the PDB file
    "grafic3.exe": "C:\Windows\SysWOW64\dwmapi.dll" geladen, Cannot find or open the PDB file


    Bei grafic3.exe handelt es sich um meine Datei.
    Mit Strg + F5 geht's auch nicht :/
    Trotzdem danke für die Antworten
     

  6. #6
    cwriter cwriter ist offline Mitglied Gold
    Registriert seit
    Mar 2010
    Beiträge
    242
    Das sieht mir stark danach aus, dass das Programm schon läuft. Habe ich recht?

    Versuch's mal so: Visual Studio (2010?, Express?) öffnen. Neues Projekt->Win32 (nicht die Konsolenanwendung) und erstellen.
    Drück dann mal F5. Funktioniert das?

    cwriter
     
    Intel inside - Idiot outside :-)

    Ich schreibe in C und bin Anfänger.
    ______________________________

    Falls ich eines Tages einen guten Beitrag schreiben werde, bitte bewerten und/oder Danke sagen.
    Danke

  7. #7
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Dein Program läuft, aber das Fenster ist nicht sichtbar.

    Ein paar Fehler:

    1) Deine WndProc gibt für WM_QUIT und WM_DESTROY keinen return-Wert zurück.

    2) return DefWindowProc im default-Switch ist eine schlechte Idee. Bei fast allen Messages mußt du auch nach deiner Behandlung die Nachricht an DefWindowProc weiterreichen. Am besten return DefWindowProc NACH dem switch/case einsetzen.

    3)Deine Hauptschleife ist falsch. Gib bei GetMessage NULL als HWND an, sonst erhältst du WM_QUIT nicht (WM_QUIT ist eine Thread-Nachricht, keine Windows-Nachricht)

    3b) WM_QUIT wirst du in der WindowProc nie erhalten. Das PostQuitMessage auf WM_DESTROY hin ist sauber, aber den WM_QUIT-Teil kannst du dir schenken. Wenn GetMessage auf WM_QUIT trifft, wird deine Hauptschleife automatisch verlassen.
    Der Inhalt von deinem WM_QUIT-Handler sieht aber so aus, als sollte er eigentlich auf WM_CLOSE reagieren (dann wäre DestroyWindow da auch richtig).

    4) Dein Fenster ist da, aber du hast es zu spät sichtbar gemacht (Dein ShowWindow-Aufruf steht hinter der Hauptschleife).
    Setze es vor die Hauptschleife (nach CreateWindowEx) oder erstelle das Fenster gleich mit Style WS_VISIBLE:

    WS_OVERLAPPEDWINDOW | WS_VISIBLE

    5) Das Semikolon nach WndProc brauchst du nicht.

    6) Warum hast du denn CS_NOCLOSE bei der Klasse angegeben? So lässt sich dein Fenster im Moment nicht wirklich beenden.

    7) Du hast bei der Klasse keinen Cursor angegeben, daher wird auch keiner gesetzt. Man erhält entweder die Sanduhr oder den Cursor, der grade aktiv war.
     

  8. #8
    silent12 silent12 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    42
    Danke genau sowas habe ich jetzt für den Anfang gebraucht. Werde morgen früh oder heute abend die Dinge ändern.
    Das mit NOCLOSE war beabsichtigt als Test (über den Task-Manager geht das Schließen ja noch).
    Personen wie du erhalten Foren am Leben.
     

  9. #9
    silent12 silent12 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    42
    Danke für die Antwort, nur bekomme ich immernoch als Fehlermeldung:


    >c:\users\silent12\documents\#c++\_grafic3\grafic3\main.cpp(22): warning C4101: 'umsg': Unreferenzierte lokale Variable
    1>c:\users\silent12\documents\#c++\_grafic3\grafic3\main.cpp(21): warning C4101: 'lParam': Unreferenzierte lokale Variable
    1>c:\users\silent12\documents\#c++\_grafic3\grafic3\main.cpp(20): warning C4101: 'wParam': Unreferenzierte lokale Variable

    Weiß dazu jemand etwas ?
     

  10. #10
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Die Warnung ist doch eigentlich ziemlich eindeutig, oder?!

    Die Funktion bekommt einige Parameter übergeben bzw. enthält von dir definierte Variablen, die du überhaupt nicht benutzt.

    Diese Warnung kannst du getrost ignorieren. Die unbenutzte Variable kannst du natürlich auch einfach löschen.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  11. #11
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Das sind keine Fehlermeldungen, die den Programmstart verhindern.

    Es sagt nur ca:
    Du hast da Variablen, die du nie verwendest.
    Sie brauchen aber trotzdem Speicher.
    Willst du sie nicht löschen?

    So was in der Art.
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  12. #12
    silent12 silent12 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    42
    Danke für die Antworten und mein Problem ist auch schon gelöst. Danke
     

  13. #13
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Bitte das Thema das nächste Mal als Erledigt markieren.
    Danke.
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

Ähnliche Themen

  1. runnable jar file - could not find main class
    Von Moon93 im Forum Java Grundlagen
    Antworten: 12
    Letzter Beitrag: 19.11.10, 20:53
  2. Unable to find an ant file to run!!
    Von IcanhasCheezburgas im Forum Java
    Antworten: 43
    Letzter Beitrag: 28.05.10, 14:51
  3. Antworten: 10
    Letzter Beitrag: 23.06.09, 17:24
  4. JAR File - Could not find the main class
    Von magic_halli im Forum Java
    Antworten: 3
    Letzter Beitrag: 29.09.08, 10:07
  5. Antworten: 1
    Letzter Beitrag: 27.12.06, 19:10