GetSaveFileName



  • Hallöchen. bin hier grad über ne Funktion gestolpert (und böse hingefallen). Es geht um GetSaveFileName. und damit natürlich auch um OPENFILENAME. ich hab irgendwie nicht so wirklich Überblick über die Struktur 😃 . Um die DialogBox aufrufen zu können, brauch ich doch nicht mehr als den Inhalt davon auf Null setzen (außer lStructSize) und die adresse an GetSaveFileName zu übergeben, oder?. nach dem aufruf scheint die Funktion erfolgreich ausgeführt worden zu sein (ich bekomm auch die DlgBox zu sehen und wähl die Datei aus, in welche ich speichern soll. Die Funktion gibt TRUE zurück) allerdings ist das lpstrFile mit 0x00000000 ein ungültiger Pointer. mus sman irgendwie vor dem Aufruf Speicher dafür reservieren? habs mit malloc und 1024 bytes versucht. daraufhin schlug die funktion fehl und ich bekomm FNERR_BUFFERTOOSMALL von der freundlichen Funktion CommDlgExtendedError() als return zurück. versuch ich ein TCHAR Array zu erzeugen und
    openFile.lpstrFile = Array;
    kommt dasselbe. buffer too small. Ich hab dann versucht ein paar andere meber von openFile zu spezifizieren, hat aber irgendwie nichts gebracht. kann mal jemand so frendlich sein, mir mein Fehler zu erklären? ^^. Hier der Code:

    void OnFileSave(HWND hWnd)
    {
    	TCHAR filename[512];
    	OPENFILENAME openFile;
    	TCHAR szPath[MAX_PATH];
    	static BOOL bFirstSave = TRUE;
    
    	ZeroMemory( &openFile, sizeof(OPENFILENAME) );
    	openFile.lStructSize = sizeof(OPENFILENAME);
    	openFile.hwndOwner = hWnd;
    	openFile.lpstrFilter = TEXT("All Files\0*.*\0\0");
    	openFile.lpstrFile = filename;
    	ZeroMemory(openFile.lpstrFile, sizeof(TCHAR));
    	if ( TRUE == bFirstSave )
    	{
    		if ( SUCCEEDED( SHGetFolderPath( NULL, CSIDL_PERSONAL , 
    										NULL, 0, szPath ) ) )
    		{
    
    		openFile.lpstrInitialDir = szPath;
    		}
    	}
    
    	if ( GetSaveFileName( &openFile ) == TRUE )
    	{
    		dlgtxt.SaveFile(openFile.lpstrFile);
    
    		bFirstSave = FALSE;
    	}
    	else
    	{
    		if(CommDlgExtendedError() == FNERR_BUFFERTOOSMALL)
    			MessageBox(NULL, TEXT("VERGISS ES. LOL"), TEXT("NÖ"), MB_OK);
    	}
    }
    

  • Mod

    Es fehlt

    openFile.nMaxFile = MAX_PATH
    


  • danke sehr 😃 ...

    schade das ich am samstag kein boxsack zum geburtstag bekommen hab. könnte ich öfters mal brauchen.


Anmelden zum Antworten