![]() |
Re: nonVCL: Runtime Error 216 (Access Violation) bei AssignF
Hallo,
ich habe mir eure Verbesserungsvorschläge mal zu Herzen genommen und den Code umgestaltet.
Delphi-Quellcode:
Eins fand ich aber doch noch seltsam:
IDC_BUTTON_CREATEMANIFEST:
begin GetMem(lFileName, GetWindowTextLength(hWndEdit) + Length(_manifestext)); GetMem(lAppTitle, GetWindowTextLength(hWndAppEdit)); try // ZeroMemory ZeroMemory(lFileName, sizeOf(lFileName)); ZeroMemory(lAppTitle, sizeOf(lAppTitle)); GetWindowText(hWndEdit, lFileName, GetWindowTextLength(hWndEdit) + 1); // append .manifest lstrcat(lFileName, _manifestext); // prepare .manifest-file AssignFile(ManifestFile, lFileName); ReWrite(ManifestFile); // create manifest string GetWindowText(hWndAppEdit, lAppTitle, GetWindowTextLength(hWndAppEdit) +1 ); manifest := CreateManifestString(lAppTitle); // write manifest string into the file Write(ManifestFile, manifest); CloseFile(ManifestFile); // if operation is successfull if GetLastError <> 0 then MessageBox(hWnd, 'Vorgang abgeschlossen - Manifest erstellt!', 'Information', MB_ICONINFORMATION + MB_OK) else MessageBox(hWnd, 'Es ist ein Fehler beim Erstellen der Manifestdatei aufgetreten!', 'Fehler', MB_ICONERROR + MB_OK); finally FreeMem(lFileName); FreeMem(lAppTitle); end; // finally end; // case IDC_BUTTON_CREATEMANIFEST Wenn ich
Delphi-Quellcode:
verwende, kriege ich in lFileName nur die ersten 3 Zeichen des Textes gespeichert (war mit allen Möglichkeiten, wo ich bei GetWindowText sizeOf benutzt habe so). So wie ichs jetzt habe gehts...
GetWindowText(hWndEdit, lFileName, sizeOf(lFileName));
Danke nochmals für eure Tipps! mfG mirage228 |
Re: nonVCL: Runtime Error 216 (Access Violation) bei AssignF
Von welchem Typ ist lFileName? Falls es PChar ist, ist SizeOf(lFileName) = 4!
|
Re: nonVCL: Runtime Error 216 (Access Violation) bei AssignF
Moin Mirage,
ich find' das nicht seltsam. lFileName ist doch ein PChar. PChar ist ein Pointer, und somit 4 Byte gross, also ist Length(lFileName) = 4, womit Du die ersten drei Zeichen + Nullbyte bekommst. |
Re: nonVCL: Runtime Error 216 (Access Violation) bei AssignF
Hi,
achso! ich dachte mit sizeOf würde ich die mit GetMem reservierte Größe erhalten! (Mathias hatte es ja so geschrieben!) dann ist ja alles klar! Danke für eure Antworten! mfG mirage228 |
Re: nonVCL: Runtime Error 216 (Access Violation) bei AssignF
Ja, war mein Fehler. Ich meine, ich mach´s ja auch bspw. so:
Delphi-Quellcode:
usw. Sorry. Ich ... äh ... *hust* ... Ich wollt´ nur mal seh´n ob ihr auch alle schön aufpasst. :mrgreen:
i := GetEnvironmentVariable('PATH',nil,0);
GetMem(pBuf,i); try if(GetEnvironmentVariable('PATH',pBuf, i { <-- "i" und nicht "sizeof" }) = 0) then ZeroMemory(@pBuf,sizeof(pBuf)); { ... } finally FreeMem(pBuf); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 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