Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WriteFile schreibt Nonsense in Datei (https://www.delphipraxis.net/97139-writefile-schreibt-nonsense-datei.html)

Lenny15 5. Aug 2007 20:46


WriteFile schreibt Nonsense in Datei
 
Hi :) ,

Ich wollte eine Logdatei erstellen und dort Aktionen aufzeichnen, die so im Programmverlauf passieren.
Ich wollte dies explizit mit der Windows-API erreichen. Ich weiss, dass es auch AssignFile(), ReWrite() und Writeln() dafür gibt.
Aber etwas mit der Winows-API umgehen zu können schadet ja nicht, oder?

So habe ich es probiert:

Delphi-Quellcode:
procedure LogEvent(lpEventStr: PAnsiChar);
var
   logFilePath : Pchar;
   hFile       : Thandle;

   ofStruct    : _OFSTRUCT;
   BytesWritten : DWORD;
begin
  logFilePath := Pchar(ExtractFilePath(ParamStr(0))+'eventlog.txt');
  hFile := OpenFile(logFilePath,ofStruct, OF_READWRITE OR OF_CREATE);
  If hFile <> INVALID_HANDLE_VALUE Then
    begin
      SetFilePointer(hFile,0,nil,FILE_END);
      WriteFile(hFile,lpEventStr,Length(lpEventStr),BytesWritten,nil);
    end;
    CloseHandle(hFile);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  LogEvent('Start');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LogEvent('Button klicked');
end;
Wenn ich nun das programm starte und ein paar mal auf den Button klicke steht am Ende soetwas in der Datei:
"�D�D"
Die Fragezeichen sind diese Kästchen.
Der Hexeditor sieht folgende Bytes in der Datei:
FC DB 44 00 6C F7 12 00 FA DB 44 00 6E E5

Weiss jemand wo der Fehler liegt und kann ihn mir bitte zeigen?
Ich bin etwas verwirrt, und weiss nich wo ich suchen soll. :( :cry:

Christian Seehase 5. Aug 2007 20:51

Re: WriteFile schreibt Nonsense in Datei
 
Moin Lenny,

das ^ fehlt.

Code:
WriteFile(hFile,lpEventStr[color=red][b]^[/b][/color],Length(lpEventStr),BytesWritten,nil);
Du willst ja den Wert schreiben, auf den der Pointer zeigt, und nicht den Pointer und alles was dahintersteht.

Lenny15 5. Aug 2007 20:58

Re: WriteFile schreibt Nonsense in Datei
 
Ahhhh, so ein kleines Zeichen erwirkt so einen undurchsichtigen Fehler.
Vielen Dank erstmal. :)
Komme jedoch leider gleich zum nächsten Problem.

Auf diese Weise steht immer nur das letzte aufgezeichnete Event in der Logdatei.
Dabei setze ich den File_Pointer doch immer extra ans Ende? :gruebel:

Lenny15 5. Aug 2007 21:09

Re: WriteFile schreibt Nonsense in Datei
 
Ich habs. OF_CREATE muss weg. :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz