Hi
Ich möchte gerne eigene Fehlercodes für meine Funktionen definieren. Blöd ist halt, daß Funktionen selbst ja einen Wert zurückliefern und somit kein Platz für Fehlercodes ist. Um das zu umgehen, dachte ich mir, einfach jeder Funktion noch einen Zeiger mitzugeben, den ich nach der Beendigung der Funktion auslese, um so an die Fehlercodes zu gelangen. Jetzt hätte ich gerne gewußt, ob so eine Vorgehensweise in Ordnung ist oder es evtl. noch andere Möglichkeiten gibt.
Ich zeige Euch mal den Quellcode. (der funktioniert übrigens recht gut)
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
recErrorCode =
record
ECode:integer;
desc:
string;
end;
PErrorCode = ^recErrorCode;
TForm1 =
class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
TSchnulli =
class(TObject)
strict private
Pinselei:TStringList;
Pinselei2:TStringList;
public
constructor create();
destructor destroy;
procedure addText(text:
string;
var ECode:PErrorCode);
function getText(
index:integer;
var ECode:PErrorCode):
string;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TSchnulli.create;
begin
Pinselei:=TStringList.Create;
Pinselei2:=TStringList.Create;
end;
destructor TSchnulli.Destroy;
begin
FreeAndNil(Pinselei);
FreeAndNil(Pinselei2);
end;
procedure TSchnulli.addText(text:
string;
var ECode:PErrorCode);
Begin
Pinselei.Add(text);
ECode.ECode:=0;
ECode.desc:='
Fein, hat alles geklappt.';
End;
function TSchnulli.getText(
index:integer;
var ECode:PErrorCode):
string;
var erg:
string;
Begin
erg:='
';
if index < Pinselei.Count
then
Begin
erg:=Pinselei.Strings[
index];
ECode.ECode:=0;
ECode.desc:='
Sehr schick.';
End
else
Begin
ECode.ECode:=27;
ECode.desc:='
Index ist zu hoch. Die Zeile ist doch garnicht da. :-(';
End;
result:=erg;
End;
procedure TForm1.Button1Click(Sender: TObject);
var bla:TSchnulli;
ECode:PErrorCode;
text:
string;
Begin
bla:=TSchnulli.create;
// Text einfügen
new(ECode);
bla.addText('
Butzibär',ECode);
Label1.Caption:='
ErrorCode: '+inttoStr(ECode.ECode) + '
*** ErrorDesc: '+ECode.desc;
dispose(ECode);
// Text auslesen
new(ECode);
text:=bla.getText(1,ECode);
Label2.Caption:='
ErrorCode: '+inttoStr(ECode.ECode) + '
*** ErrorDesc: '+ECode.desc;
dispose(ECode);
button1.Caption:=text;
FreeAndNil(bla);
end;
end.