![]() |
Access Violation bei TOpenFileName
Ich benutze folgende TOpenFileName-Struktur in meinem nonVCL-Programm:
Code:
Das funktionniert ohne Probleme, solange das Programm läuft. Aber wenn ich es beende, bekomme ich eine Access-Violation. Wenn ich oben markierte Annweisungen auskommentiere, triit dies nicht auf. Die Puffergröße müsste groß genug sein, denn die Funktion GetOpenFileName liefert ja True zurück. Aus dem PSDK werd ich nicht so ganz schlau, ob oben genannte Felder eine Initialisierung brauchen. Wäre also ganz scönn, wenn mir jemand helfen könnte.[/code]
OFN.lStructSize := SizeOf(OpenFileName);
OFN.hWndOwner := Hnd; OFN.hInstance := hInstance; OFN.lpstrFilter := DataInput_Filter; OFN.lpstrCustomFilter := nil; OFN.nMaxCustFilter := 0; OFN.nFilterIndex := 0; OFN.nMaxFile := 256; OFN.nMaxFileTitle := 256; OFN.lpstrFile := @FileName; { markiert } OFN.lpstrFileTitle := @FileTitle; { markiert } OFN.lpstrInitialDir := 'C:\'; OFN.lpstrTitle := 'Quelldatei auswählen'; OFN.Flags := OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_READONLY; Nachtrag: Auch wenn man es sich wahrscheinlich denken kann, wollte ich doch noch sagen, dass der Fehler nur auftritt, wenn diese Struktur als Parameter einer GetOpenFileName-Funktion aufgerufen wird. Und da der Fehler nach dem Senden der WM_DESTROY-Nachricht auftaucht, sag ich noch, dass bei WM_DESTROY lediglich steht:
Code:
PostQuitMessage(0)
|
HI vielleicht
Code:
OFN.Free;
|
Zitat:
|
Moin Chewie,
ich vermute mal, dass Du den Speicher für die Struktur mit GetMem oder AllocMem zuweist. Wie werden denn die variablen Strings deklariert und initialisiert? (DataInput_Filter, FileName, FileTitle) DataInput_Filter müsste ja ein PChar, die anderen beiden als String deklariert sein (so wie Du sie verwendest). Obwohl des bei Strings ja @FileName[1], bzw. @FileTitle[1] heissen müsste, damit's funktioniert. Zu guter Letzt: Werden denn die reservierten Speicherbereiche auch alle wieder freigegeben? (DataInput_Filter und ggf. OFN) BTW: Hast Du Dir die Struktur selber definiert? @Roman: Im Prinzip richtig, nur ist OFN kein Objekt, sondern ein Record. EDIT :oops: für den letzten Satz war ich zu spät |
Hab ichs mir doch gedacht wäre ja komisch wenn das gestimmt hätte, ich wollte eigentlich damit nur sagen dass er den Speicher wieder "Freigeben" muss
|
Moin Roman,
deshalb sagte ich ja: Im Prinzip richtig ;-) |
Zitat:
Zitat:
Zitat:
Zitat:
|
Mist, die Fehlermeldung kommt jetzt nicht mehr, aber jetzt wird nichts mehr in den Puffer hineingeschrieben :( Muss mich morgen noch mal damit befassen.
|
Darf ich dich mal auf meine HP verweisen oder warst du da schon?
Ich hätte da keine Strings genommen sondern Char-Arrays. Du kannst auch PChar nehmen nur dann mußt du erst Speicher reservieren und wieder freigeben. |
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz