Stapelfehler



    1. Ja ist die Debug-Version.

    2. Könnt ich mal machen. Aber dürfte ja eh nicht viel bringen, denn wie gesagt, auf Win2000 funzt es, auf WinME nicht, und eindeutig liegt das Problem beim ersten Parameter von SetMenuItemInfo(), nämlich dem Handle eines Untermenüs.



  • Hast du die Struktur jetzt wenigstens mal mit 0 (ZeryMemory) initialisert oder vollständig ausgefüllt?



  • Kann ich im Moment leider nicht (bin grad an der FH), aber ich versuchs heute nachmittag mal und sag nochmal bescheid! 🙂

    Was kann das Nullen der Struktur denn eigentlich ändern?



  • Wenn du nicht allen Membern einen Wert zuweist und du die Struktur vorher nicht initialisiert hast enthalten diese beliebige Werte.



  • Da stimme ich dir zu. Machst du das grundsätzlich vor Funktionsaufrufen?

    Ich habe das eigentlich selten gemacht und habe noch nicht mit solchen Fehlern zu tun gehabt. 😉



  • Globale Variablen werden afaik automatisch initialisiert, aber ansonsten solltest du, wenn du nicht alle Member besetzt, vorher ZeroMemory aufrufen 😉



  • Danke für die Auskunft! 👍

    Werd ich in Zukunft so machen.

    Sollte das bei meinem Stapelfehler auch nicht helfen, sag ich nochmal bescheid. 🙂



  • Hi,

    wenn ich die Struktur vor dem Aufruf nulle, klappt es auch nicht, hier mal der gesamte Code:

    bool CMenu::MeasureItem(LPMEASUREITEMSTRUCT pstMeasureItem)
    {
    
        MENUITEMINFO stSubMenuPt;
    
        ZeroMemory(&stSubMenuPt, sizeof(MENUITEMINFO));
    
        int nSubMenuItem = LOWORD(pstMeasureItem->itemData);
        int nType = HIWORD(pstMeasureItem->itemData);
    
        SUBMENU *pstSubMenu = this->GetSubMenuStruct(pstMeasureItem->itemID, 
          this- >pstMenu);
    
        if (pstSubMenu == NULL || pstSubMenu->hHandle == NULL)
          return false;
    
        if (nType == MT_LINE)
        {
           pstMeasureItem->itemHeight = g_nMenuHeight - C_nSeparator;
    
           stSubMenuPt.cbSize = sizeof(MENUITEMINFO);
           stSubMenuPt.fMask = MIIM_STATE;
           stSubMenuPt.fState = MFS_DISABLED | MFS_UNHILITE;
     // Hier kommt der Stapelfehler!			
           SetMenuItemInfo(pstSubMenu->hHandle, pstMeasureItem->itemID, false, 
              &stSubMenuPt);
        }
    
        else
          pstMeasureItem->itemHeight = g_nMenuHeight;
    
        if (nSubMenuItem == 0 || nSubMenuItem == pstSubMenu->nCount - 1)
           pstMeasureItem->itemHeight += 1;
    
        pstMeasureItem->itemWidth = pstSubMenu->nWidth;
    
        return true;
    }
    

    Was ist daran nur falsch? (Wie gesagt, auf Win2000 funktioniert es, auf WinME aber nicht).



  • Hast du evtl. per define irgendwo gesagt, dass du für W2K compilieren willst?!



  • Nein hab ich nicht!

    (Hab nur ein WIN32_LEAN_AND_MEAN drin, dürfte aber nicht schlimm sein?!).


Anmelden zum Antworten