GetOpenFileName - FileDialog funktioniert nicht
-
Hallo, ich möchte gerne einen Datei-Auswahldialog haben.
Dieser wird auch erfolgreich angezeigt, aber der Rückgabewert ist 0
und der Filename daher leer. Was ist falsch?OPENFILENAME FILE; char Filename[260]; HANDLE hFile; ZeroMemory(&FILE, sizeof(FILE)); FILE.lStructSize = sizeof(FILE); FILE.hwndOwner = hWnd; FILE.lpstrFile = Filename; FILE.lpstrFile[0] = '\0'; FILE.nMaxFile = sizeof(hFile); FILE.lpstrFilter = "All\0*.*\0Text\0*.TXT\0"; FILE.nFilterIndex = 0; FILE.lpstrFileTitle = NULL; FILE.nMaxFileTitle = 0; FILE.lpstrInitialDir = NULL; FILE.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; GetOpenFileName(&FILE); int error; error = GetLastError(); SendMessage(FileName, WM_SETTEXT, 0, (LPARAM)Filename); sprintf(Filename,"%d",error); MessageBoxA(NULL,Filename,"A",MB_OK);Im Textfeld steht ein einzelnes kryptisches Zeichen [0x14]
und GetlastError gibt 0 [ERROR_SUCCES] zurück!
Ich hab mir das ganze mal mit OllyDbg angeschaut und während dem Dialogfenster sind diverse LastErrors zusehen, unter anderem INVALID_PARAMETER, wobei diese Fehler aber alle in der comdlg32.dll liegen.Weiß jemand Rat?
Thx
-
Hi,
Du machst da, ums sanft auszudrücken, totalen Mist
...Also:FILE.lpstrFile = Filename; FILE.lpstrFile[0] = '\0';Wieso denn das '\0' ?
HANDLE hFile; FILE.nMaxFile = sizeof(hFile);Was bringt dir das ? Das gehört doch da gar nicht hin :p ...
HANDLE ist hier falsch. (Schau dir die Definition der Struktur unten im Link an
).FILE.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";Das reicht auch nicht:
The last string in the buffer must be terminated by two NULL characters.
int error; error = GetLastError();Mal davon abgesehen das du damit den Return-Wert von GetLastError von unsigned long auf int verkürzt (und damit mglw. noch weiteren Mist baust
) brauchst du hier die Funktion
CommDlgExtendedErrorPS: Vielleicht guckst du dir die Definition der Struktur OPENFILENAME noch mal an. Hier hast du auch nochmal ein Beispiel dazu.
-
Wo ich das herhabe?
na aus der MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/commondialogboxlibrary/usingcommondialogboxes.aspWar ja klar, dass die nur Schrott machen...
Big thx an dich!
-
Das Beispiel aus der MSDN ist doch in Ordnung! CodeFinder hat einfach unrecht mit seinen Punkten 1 und 3. Bei 2 hast du den Code falsch abkopiert.
-
Ich habe es ausprobiert, alle File-Attribute hinzugefügt, die bei CodeFinders Beispiel bei APInet dabeiwaren die MAX_PATHs eingesetzt, wo sie nicht waren, den Punkt 2 behoben
UND
das zweite \0 hingemacht und es funktioniert nun!
Geht aber auch ohne das zweite 0-Byte.
Thx @ all.
-
OFN schrieb:
Geht aber auch ohne das zweite 0-Byte.
Da ist ein zweites Nullbyte. Stringliterale werden automatisch mit einem Nullbyte abgeschlossen. Dazu kommt das im String, macht zwei

-
sadkas schrieb:
Das Beispiel aus der MSDN ist doch in Ordnung! CodeFinder hat einfach unrecht mit seinen Punkten 1 und 3. Bei 2 hast du den Code falsch abkopiert.
Du Troll...keine Ahnung von nix und dann sonne Sch**** posten ...lol!
-
CodeFinder schrieb:
Du Troll...keine Ahnung von nix und dann sonne Sch**** posten ...lol!
Geht's noch? Ist dir klar, dass der "Troll" Recht hat?
-
brauchst du hier die Funktion
CommDlgExtendedErrorDie gibt es aber nur für Windows CE. Zumindest führt dein Link zur Windows CE Dokumentation.
-
@MFK: Nö, Punkt 3 Stimme ich zu (da wären dann 3 Null-Terminierungen), aber alles andere ist korrekt.
@Luckie: Ups sry, ne gilt nit nur für Windows CE, der Link is nur falsch, habs mir nit so genau durchgelesen...Hier ist der richtige:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/commondialogboxlibrary/commondialogboxreference/commondialogboxfunctions/commdlgextendederror.asp
-
zu 1) wenn er da keine \0 hinmacht steht im edit-feld für den dateinamen ein zufälliger string.
-
2000 schrieb:
zu 1) wenn er da keine \0 hinmacht steht im edit-feld für den dateinamen ein zufälliger string.
Hm habs mal getestet, aber erscheint auch kein zufälliger Dateiname(n-String)
. Naja is auch Rille.