Aufmal gibts nen "Stapelfehler"



  • Hi

    Hab hier ne ganz komische sache.
    Folgender code, hat schon tausendmal funktioniert, aber auf einmal stürtzt das Programm immer ab

    DX8_LD2D verursachte einen Stapelfehler in Modul DX8_LD2D.EXE bei 01b7:00406fe3.
    Register:
    EAX=001ac82c CS=01b7 EIP=00406fe3 EFLGS=00010202
    EBX=00affad0 SS=01bf ESP=00affa68 EBP=00affa7c
    ECX=00901a70 DS=01bf ESI=00008af4 FS=533f
    EDX=00008b10 ES=01bf EDI=00affa84 GS=6667
    Bytes bei CS:EIP:
    83 09 00 2d 00 10 00 00 eb e9 29 c1 83 09 00 89
    Stapelwerte:
    00000000 004016d0 00affad0 00008af4 00affa84 00affa9c bff7363b 00000774 00000024 00000000 00affb10 8ace52e7 
    000001bf 00affab0 bff94407 66678af4
    

    "DX8_LD2D.EXE" ist natürlich meine Anwendung...

    Hier der Code:

    #define WindowTitle     "dx8_LD2d"
    #define WindowClassName "DDWinClass"
    HWND hwndmainwnd;
    
    //------------------------------------------------------------------------------------------
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
      int msg_value = MessageBox(NULL, "Soll wirklich gestartet werden?", "dx8_LD2d", MB_ICONQUESTION | MB_YESNO);
      if(msg_value!=IDYES)return 0;
    
    MSG      msg;
    WNDCLASS wndclass_main;
    
    if(!hPrevInstance)
    {
      wndclass_main.style         = CS_HREDRAW | CS_VREDRAW;
      wndclass_main.lpfnWndProc   = WndProc_main;
      wndclass_main.cbClsExtra    = 0;
      wndclass_main.cbWndExtra    = 0;
      wndclass_main.hInstance     = hInstance;
      wndclass_main.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
      wndclass_main.hCursor       = LoadCursor(NULL, IDC_ARROW);
      wndclass_main.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
      wndclass_main.lpszMenuName  = NULL;
      wndclass_main.lpszClassName = WindowClassName;
      RegisterClass(&wndclass_main);    
    }
    //Bis hier hin, kommt das Programm, bei CreateWindow stürtzt es ab :(
    hwndmainwnd = CreateWindow(WindowClassName, WindowTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 
    CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
    ShowCursor(false);
    ShowWindow  (hwndmainwnd, nCmdShow);  
    UpdateWindow(hwndmainwnd);
    //...
    

    Hab schon den teil 1:1 aus meinem !Funktionierenem! backup kopiert, hilft aber auch nichts

    Ich habe absolut nicht geändert...
    Woran kann das liegen, und wie bekomme ich das wieder zum laufen??



  • if(!hPrevInstance)
      ...
    else 
      "geht weiter als wär nix passiert ??"
    


  • Hab das if weg gemacht, aber es kommt immer noch der selbe fehler 😞



  • RedEagle schrieb:

    Hab das if weg gemacht

    Gut so.

    MSDN schrieb:

    hPrevInstance
    [in] Handle to the previous instance of the application. This parameter is always NULL.

    Erstmal solltest du den Rückgabewert von RegisterClass prüfen.
    Und dann schau dir mal deine WndProc_main Funktion an. Diese wird bei CreateWindow immerhin auch schon aufgerufen.



  • Es lag wirklich an einer Funkltion in der WndProc_main:

    GetPrivateProfileString(ini_group, ini_item, "NULL", ini_value, size, map_path);
    
    //...
    
        Bitmap_object = DDLoadBitmap(lpDirectDraw, object, 20, 20); //lädt das bitmap
        SetRect(&rBitmap_object, (X*20), (Y*20), ((X*20)+20), ((Y*20)+20)); //Koordinaten der bmp's                                    
        lpDDSBack->Blt(&rBitmap_object, Bitmap_object, NULL, DDBLT_WAIT, NULL);//Hintergrund
    

    Diese beiden Stelle werden 1200 mal Durchgefühert (um eine Map zu laden, die aus vielen 20×20 px großen Bitmaps besteht), liegts evtl daran??
    kann ich das denn dann irgendwie verbessern??



  • Habs zum laufen gebracht...
    Aus irgendeinem Grund lag's am Funktionskopf...
    Hab eine Klasse global gemacht, und schon gings...

    DANKE 👍


Anmelden zum Antworten