CMenu-Problem



  • Hi erstmal der Quellcode, in welchem das Problem steckt

    /********************************************************************************************
    * Beschreibung:	Ereignishandler für Kontextmenü des Dialogs									*
    ********************************************************************************************/
    LRESULT CPPage_Streams::OnNotifyList(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
    {
    	__debugbreak();	
    	CMenu	menuRes;
    	if ( menuRes.LoadMenu( IDR_MENU_POPUP ) == 0 )
    	{
    		DWORD err = GetLastError();
    		CString s;
    		s.Format(_T("%x"),s);
    		MessageBox(s);
    	}
    	CMenu * pMenu;
    	pMenu = menuRes.GetSubMenu(4);
    	if ( pMenu != NULL )
    	{
    		POINT	ptCursor;
    		::GetCursorPos(&ptCursor);	
    		HWND hwnd = GetActiveWindow();	
    		CWnd * wnd = CWnd::FromHandle(hwnd);
    		BOOL rVal = pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RETURNCMD, ptCursor.x, ptCursor.y, wnd);				
    		if ( rVal > 0 && SUCCEEDED(HandlePopMenu(rVal)))
    			return TRUE;
    	}
    	menuRes.DestroyMenu();
    }
    

    Nun zu meinem Problem. Im Debug-Modus läuft alles einwandfrei, so wie es soll, es wird das Menü geladen ein Submenü extrahiert und angezeigt und dann auf das Ereignis reagiert. Im Release allerdings scheitert die Methode CMenu::LoadMenu() mit der Fehlermeldung 0x7c21a788 ( laut Windows Error successful ). Woran kann das liegen? Danke für jede Hilfe und ich hoffe kein Thema übersehn zu haben mit ähnlichen Problem.

    mfg LeXxXxXx


  • Mod

    Diesen Errocode 0x7c21a788 gibt es so nicht.
    Mach mal einen Rebuild all. Oder lösche die RES Datei. Oder öffne mal die EXE im Resource-Editor und sachu nach ob die entsprechende ID vorhanden ist.



  • arg sry, merke gerade das da ein Fehler im Fehlercode ist ^^

    die Zeile zur Ausgabe sollte doch folgendermaßen heißen

    if ( menuRes.LoadMenu( IDR_MENU_POPUP ) == 0 )
        {
            DWORD err = GetLastError();
            CString s;
            s.Format(_T("%x"),[b]err[/b]);
            MessageBox(s);
        }
    

    der entstehende Fehlercode: 0x715 (hexadezimal) oder 1813 (dezimal)

    Windows:

    0x715: Der angegebene Ressourcentyp wurde nicht in der Image-Datei gefunden.

    Ich versuch mal weiter rauszufinden warum und probier das mal aus.

    Danke für jede weitere Hilfe 😞


  • Mod

    Nun das heißt einfach dass in Deiner EXE die Ressource nicht drin ist, wie ich schon vermutete.
    Wie schon geschrieben: Öffne die EXE im Ressource Editor. Evtl. mach mal einen Rebuild all.



  • Danke hat aber nix genützt ein Rebuild hat nichts gebracht, hab das Problem anders gelöst in dem ich das Menü direkt erzeuge.

    Danke trotzdem


  • Mod

    War denn ein entsorechendes Menu unter der Nummer in der EXE?



  • Nein hab keins in der DLL gefunden



  • Also das Problem ist nicht gelöst, jetzt öffnet er Dialoge nicht mehr und diese sind in der DLL enthalten. Das Problem tritt wieder nur bei Release Modus auf. Fehlermeldung wieder die gleicher

    Die angegebene Image-Datei enthält keinen Ressourcenabschnitt. (0x714)

    CInfoDialog dlg(name,entry,rec,stream);				
    if ( dlg.DoModal() == IDOK )
    {
    }
    

  • Mod

    DLL und MFC?

    Hast Du denn AFX_MANAGE_STATE verwendet?



  • Ja das verwende ich, hatte bis jetzt noch nie Probleme bei DLL mit MFC, kann ja auch nicht wirklich sein das er die Ressourcen net reinhaut, in der DLL sind die nämlich drin nur findet er die anscheinend nicht -.-


Anmelden zum Antworten