AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WriteFile schreibt Nonsense in Datei
Thema durchsuchen
Ansicht
Themen-Optionen

WriteFile schreibt Nonsense in Datei

Ein Thema von Lenny15 · begonnen am 5. Aug 2007 · letzter Beitrag vom 5. Aug 2007
Antwort Antwort
Lenny15

Registriert seit: 5. Jan 2007
10 Beiträge
 
#1

WriteFile schreibt Nonsense in Datei

  Alt 5. Aug 2007, 20:46
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.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: WriteFile schreibt Nonsense in Datei

  Alt 5. Aug 2007, 20:51
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Lenny15

Registriert seit: 5. Jan 2007
10 Beiträge
 
#3

Re: WriteFile schreibt Nonsense in Datei

  Alt 5. Aug 2007, 20:58
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?
  Mit Zitat antworten Zitat
Lenny15

Registriert seit: 5. Jan 2007
10 Beiträge
 
#4

Re: WriteFile schreibt Nonsense in Datei

  Alt 5. Aug 2007, 21:09
Ich habs. OF_CREATE muss weg.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 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