![]() |
Class property meckert mich unberechtigt an
Zumindest fühle ich mich unberechtigt angemeckert :cry:
Folgende kleine Klasse (Original Copypasta):
Delphi-Quellcode:
Kompiliere ich das, errötet die Zeile mit der Deklaration der class property (LogFileName), und der Fehler lautet:
unit _uDebugLog;
interface uses Classes, SysUtils, DateUtils, SyncObjs; type TDebugLog = class private class var FCS: TCriticalSection; class var FLogFileName: String; class procedure SetLogFileName(const Value: String); public class var Active: Boolean; class property LogFileName: String read FLogFileName write SetLogFileName; class procedure Log(s: String); end; implementation { TDebugLog } class procedure TDebugLog.Log(s: String); var f: TFileStream; begin if not Active then Exit; FCS.Enter; try s := FormatDateTime('dd.mm.yyyy hh:nn:ss:zzz', now)+': '+s+#13#10; try f := TFileStream.Create(FLogFileName, fmOpenReadWrite or fmShareDenyWrite); f.Seek(0, soFromEnd); f.Write(s[1], Length(s)); finally f.Free; end; finally FCS.Leave; end; end; class procedure TDebugLog.SetLogFileName(const Value: String); var fileHandle: Integer; errorCode: Integer; begin FLogFileName := Value; if not FileExists(FLogFileName) then begin try fileHandle := FileCreate(FLogFileName); except fileHandle := -1; end; if fileHandle <> -1 then FileClose(fileHandle) else begin errorCode := GetLastError; raise Exception.Create('Could not create log file "'+FLogFileName+'". Code: '+IntToStr(errorCode)+' Message: '+SysErrorMessage(errorCode)); end; end; end; initialization TDebugLog.FCS := TCriticalSection.Create; finalization TDebugLog.FCS.Free; end. Zitat:
|
AW: Class property meckert mich unberechtigt an
Delphi-Quellcode:
class procedure SetLogFileName(const Value: String); static; // static nicht vergessen
|
AW: Class property meckert mich unberechtigt an
Zwei vollkommen unproduktive Herummäkeleien:
|
AW: Class property meckert mich unberechtigt an
@DeddyH: :wall: Danke, ja. Tut weh :)
@Hübscher Günni: 1) Ich war der Auffassung, dass diese bei D2007 noch nicht existierten. Probiere ich aber gleich aus, weil das wäre natürlich erheblich schöner. Aber irgend etwas wabert mir da him Hinterkopf, weswegen ich das autoamtisch so geschrieben haben muss. 2) Threads. Ich möchte für mein Tool eine einzige Log-Datei haben, um darin u.a. auch die Reihenfolgen zu erkennen, in denen Dinge passieren. Da hier 3-4 Threads beteiligt sind, mach ich's auf diese Weise. Das Ganze ist auch für ein ganz spezielles Problem geschrieben, dem ich auf die Schliche kommen will. (Dinge funktionieren auf meinem PC, aber beim Kunden nicht.) |
AW: Class property meckert mich unberechtigt an
Klassen-Konstruktor und Klassen-Destruktor gibt es in Delphi 2007 noch nicht.
Für diesen Fall sehe ich jeweils eine Klassenmethode Initialize() und Finalize() vor, die im entsprechenden Abschnitten der Unit aufgerufen wird. Was dabei im einzelnen passiert, geht nur die Klasse etwas an. |
AW: Class property meckert mich unberechtigt an
Ha! Also doch. Init- und DeInit-Prozeduren habe ich an anderen Stellen ebenfalls genutzt dafür. Der Logger hier ist aber wie gesagt eher Q'n'D für ein bestimmtes Problem. Der wird nicht Teil des Produktivbetriebes.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:55 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