Komisches Problem mit Degub und ohne ?!



  • Also morgen erstmal und sorry für den dummen Topicnamen, aber ich weiss nicht wie ichs sagen soll.

    Ich prorgammiere im Moment einen Client. So ich sitz da also mit meinem Visual Studio, drück dann halt F5 und alles wird gestartet. Da der passende Server auch von mir ist, wollte ich jetzt mal 2 Clients starten, aber das geht ja nicht mit F5. Also rein ins Debug Verzeichnis und Client starten.

    Tja, war wohl nichts, mein Programm stürzt knadenlos ab. Starte ich aber aus VC++ heraus, keine Probleme 😕

    Also hier mal n bissl Quelltext, ich weiss theoretisch auch wo der Fehler liegt, gleich mehr dazu:

    ////////////
    // includes
    // global
    #include <winsock2.h>
    
    // intern
    #include "resource.h"
    #include "startdlg.h"
    #include "../server/server.h"
    
    // public
    HINSTANCE           hPubInst;
    HWND                hSockWnd;
    const char          szClassname[]="luci";
    
    // message handling
    LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        // private
        WORD wEvent;
        WORD wError;
    
        // switch
        switch(uMsg){
        // on create
        case WM_CREATE:
            // show dialog
            CreateDialog(hPubInst, MAKEINTRESOURCE(DLG_START), NULL, (DLGPROC)StartDlgProc);
            return 0;
    
        // on socket event
        case LUNATIC_SOCKEVENT:
            wEvent = WSAGETSELECTEVENT(lParam);
            wError = WSAGETSELECTERROR(lParam);
    
            HandleSocketEvent((SOCKET)wParam, wEvent);
            return 0;
        }
    
        // return default
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    
    // winapi entry point
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, int nShowCmd)
    {
    
        // private
        WNDCLASSEX      wc;
        MSG             msg;
        HWND            hWnd;
    
        // make public
        hPubInst = hInstance;
    
        // load dlls for richedit-control
        LoadLibrary("riched32.dll");
    
        // prepare struct
        wc.style            = 0;
        wc.cbClsExtra       = 0;
        wc.cbWndExtra       = 0;
        wc.hbrBackground    = NULL;
        wc.hCursor          = NULL;
        wc.hIcon            = NULL;
        wc.lpszMenuName     = NULL;
        wc.hInstance        = hInstance;
        wc.lpfnWndProc      = WndProc;
        wc.lpszClassName    = szClassname;
        wc.cbSize           = sizeof(WNDCLASSEX);
        wc.hIconSm          = NULL;
    
        // register class
        RegisterClassEx(&wc);
    
        MessageBox(0, "DEBUG #1", 0, 0);
    
        // create window
        hWnd = CreateWindow(szClassname, "", 0, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,0, 0, hInstance, 0);
    
        MessageBox(0, "DEBUG #2", 0, 0);
    
        if(hWnd)
            // make public
            hSockWnd = hWnd;
        else
            return 0;
    
        // msg loop
        while(GetMessage(&msg, 0, 0, 0)){
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        // quit
        return 0;
    }
    

    So, die Messagbox mit "DEBUG #1" wird noch angezeigt die 2te mit "DEBUG #2" nicht mehr, davor kommt dieses Windows-Fenster: http://www.brain-death.net/error00.jpg

    dann drück ich auf "Abbrechen", weil ich ja debuggen will und dann kommt das hier: http://www.brain-death.net/error01.jpg

    dann wieder auf "Abbrechen" und es kommt http://www.brain-death.net/debug00.jpg

    Also ich find das alles sehr verwirrend, weil schließlich alles über den VC++ einwandfrei läuft.

    Man stelle sich mal vor, man entwickelt ein Mega-Projekt, alles läuft wunderbar, händigt sein Projekt aus und nichts läuft, dass ist doch mies 😕

    PS: Es ist egal ob ich Debug oder Release compilier...

    Hoffentlich kann mir jemand helfen...
    ciao para
    😃



  • oh man da steht doch der fehler. die datei konnte nicht geöffnet werden. (weil die pfade, wenn du dein programm aus der IDE startest, anders sind als sonst)



  • Ja klasse, wie kann ich das ändern, ich mein, das war noch nie so....



  • das ist schon immer so!! mit GetModuleFileName den pfad der exe ermitteln.



  • Das gibt doch keinen Sinn, erstens stürzt das Programm bei einem CreateWindow ab und zweitens ist mein Programm auf überhaupt keine Pfade/Dateien angewiesen und sollte in jedem x-beliebigen Verzeichniss laufen. Davon mal abgesehen, wenn man Programm irgentwas mit Pfaden/Dateien machen würde, dann dürfte es wohl kaum bei einem CreateWindow abstürzen, oder?

    ciao



  • Original erstellt von <qwerqwer>:
    das ist schon immer so!! mit GetModuleFileName den pfad der exe ermitteln.

    Wozu denn? Um dann das Ergebnis beim ersten Parameter von CreateWindow anzugeben oder was? 😕 🙄



  • ne bei fopen !!!!!!!!!



  • Ich benutz überhaupt kein fopen, wie oft noch, der Fehler tritt bei dem CreateWindow auf, ist das so schwer zu kapieren oder was?



  • das kann garnicht sein! das ist unmöglich. der ruft doch nicht einfach so fgetc auf (wo er fehlschlägt, weil die datei nicht offen ist)



  • Doch ich hab irgentwo 2,3 Dialoge weiter ein fopen, wenn ich das wegmache geht es. Aber was soll das? Das ist doch erst viel später... 😕

    danke!
    ciao

    Und wieso zeigt er die 2te Msgbox nicht an... 😕 😕

    [ Dieser Beitrag wurde am 25.04.2003 um 13:31 Uhr von paranoiac.org editiert. ]



  • nach einer asseration wird das programm sofort beendet.



  • du solltest vielleicht mal für den dritten parameter (style) etwas sinnvolles eintragen ...

    ich vermute mal, du willst das haupfenster unsichtbar haben und als dummy für den socket laufen lassen, oder ?

    rocknix ///

    ps: was macht eigentlich das CreateDialog() genau ? WM_CREATE wird meist schon ausgeführt, bevor CreateWindow() zurückkommt, sprich ist so eine asynchrone geschichte ...

    [ Dieser Beitrag wurde am 25.04.2003 um 13:46 Uhr von RockNix editiert. ]



  • Ja aber das mit fopen wär meinetwegen erst 5 Minuten später gekommen, dass kann doch mein Programm normal net am Anfang schon stören...

    danke an alle
    ciao para
    😃



  • wahrscheinlich hast du einen denkfehler und das fopen wird eher aufgerufen als du denkst 😉 mach mal ne message box genau eine zeile davor...



  • Wird nicht aufgerufen, weil bevor das mit fopen kommt, wird schon ne andere MessageBox und ein Dialog angezeigt. Diese Sachen werden hier aber nicht angezeigt....

    ciao



  • Original erstellt von RockNix:
    **du solltest vielleicht mal für den dritten parameter (style) etwas sinnvolles eintragen ...

    ich vermute mal, du willst das haupfenster unsichtbar haben und als dummy für den socket laufen lassen, oder ?

    rocknix ///

    ps: was macht eigentlich das CreateDialog() genau ? WM_CREATE wird meist schon ausgeführt, bevor CreateWindow() zurückkommt, sprich ist so eine asynchrone geschichte ...

    [ Dieser Beitrag wurde am 25.04.2003 um 13:46 Uhr von [qb]RockNix** editiert. ][/QB]

    Stimmt, dann liegts daran, dass ich die Message schon lang bekommen, hab, danke!

    Aber wieso brauch ich einen vernünftigen Style?



  • naja, du brauchst zumindest mal einen style, damit es ein normales fenster wird, das nachrichten empfangen kann.

    WS_POPUP sollte das minimum sein ...

    mit

    ShowWindow( hwnd, SW_HIDE)
    

    schiebst du es dann in den nicht sichtbaren bereich.

    rocknix ///



  • quatsch



  • welche güte ... me/ wird auch mal gefaked

    DANKE 🙄



  • bitte, gerne wieder 🙂 🙂



  • hmhm, wird zeit, das die kleinkinderfraktion wieder auf die schulbank zurück darf ... 🙄

    rocknix ///


Anmelden zum Antworten