Nach dem öffnen des BrowseForFolder Dialogs kann mein Programm nicht beenden!



  • Hallo liebe Kollegen,

    ich habe ein seltsames Problemm mit dem Beenden meines Programms nach dem ich oben gennanten Dialog aufrufe und wieder zu mache, und zwar nach dem Klick auf Beenden wird nur das Fenster unsichtbar Programm läuft im Hintergrund weiter.
    Es passiert nur auf einem Rechner mit XP Professional.

    Hier ist mein Code für das Fenster:

    // Ordnerauswahldialog
    bool selection(TForm* parent, char* wurzelordner, char* titel)
    {
    		char* pPathBuffer = new char[MAX_PATH];
            strcpy(pPathBuffer, wurzelordner);
    
    		BROWSEINFO mb;
    
            mb.hwndOwner = parent->Handle;
            mb.pidlRoot = NULL;
            mb.pszDisplayName = NULL;
    		mb.lpszTitle = titel;
    		mb.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE | BIF_EDITBOX;
    		mb.lpfn    = BrowsePathCallback;
    		mb.lParam  = (LPARAM)pPathBuffer;
    
            // Dialog Anzeigen
    		LPITEMIDLIST ItemIDList = SHBrowseForFolder(&mb);
    
    		if(ItemIDList != NULL)
                {
                char strPath[MAX_PATH];
                SHGetPathFromIDList(ItemIDList,strPath);
    
    		    // Pfad an OrdnerName uebergeben
    			HauptF->OrdnerName = strPath;
    
    			delete  pPathBuffer;
    			return true;
    			}
    		else
    			{
    			delete  pPathBuffer;
    			return false;
    			}
    
    }
    

    Hat jemand eine Idee woran das liegen konnte?



  • Hallo alle zusammen,

    das Problem ist gelöst und zwar beim Setzen das Flages BIF_NEWDIALOGSTYLE ist Aufruf von CoInitialize(NULL) erforderlich.

    Hier ist noch mal mein ergänzten Code:

    char* pPathBuffer = new char[MAX_PATH];
            strcpy(pPathBuffer, wurzelordner);
    
    		CoInitialize(NULL); // Erforderlich fuer den BIF_NEWDIALOGSTYLE Flag
    		BROWSEINFO mb;
    
            mb.hwndOwner = parent->Handle;
            mb.pidlRoot = NULL;
            mb.pszDisplayName = NULL;
    		mb.lpszTitle = titel;
    		mb.ulFlags = BIF_NEWDIALOGSTYLE;
    		mb.lpfn    = BrowsePathCallback;
    		mb.lParam  = (LPARAM)pPathBuffer;
    
            // Dialog Anzeigen
    		LPITEMIDLIST ItemIDList = SHBrowseForFolder(&mb);
    
    		if(ItemIDList != NULL)
                {
                char strPath[MAX_PATH];
                SHGetPathFromIDList(ItemIDList,strPath);
    
    		    // Pfad an OrdnerName uebergeben
    			HauptF->OrdnerName = strPath;
    
    			delete  pPathBuffer;
    			return true;
    			}
    		else
    			{
    			delete  pPathBuffer;
    			return false;
    			}
    


  • Dann fehlt da sicherlich auch noch ein CoUninitialize().


Anmelden zum Antworten