Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit TObject.Classname (https://www.delphipraxis.net/129526-problem-mit-tobject-classname.html)

Hawkeye219 20. Feb 2009 19:05

Re: Problem mit TObject.Classname
 
@himitsu

Es könnte jetzt jemand auf die Idee kommen, den Aufruf aus dem zweiten Code-Block mit der Original-Routine zu kombinieren. Das wird nicht gut gehen...

Gruß Hawkeye

himitsu 20. Feb 2009 20:17

Re: Problem mit TObject.Classname
 
Delphi-Quellcode:
var ServerList: Array[..] of TObject;

function NotifyToList(item: TObject): Word;

// oder besser gleich TServer statt TObject

var ServerList: Array[..] of TServer;

function NotifyToList(item: TServer): Word;
PS: warum eigentlich ItemUsed?
Delphi-Quellcode:
i := 0;
while not Assigned(ServerList[i]) do Inc(i);
ServerList[i] := item;

// aka (Vorherigs halten viele abver für schöner/verständlicher)

i := 0;
while ServerList[i] = nil do Inc(i);
ServerList[i] := item;
und die Übergabe dann nur noch so:
Delphi-Quellcode:
NotifyToList(Server);

implementation 5. Mär 2009 16:46

Re: Problem mit TObject.Classname
 
Wenn ich keine Adressen benutze, sondern direkt die Klassenreferenz (TObject), dann wird jedes mal eine AccessViolation ausgelöst.
Also geht es so nicht.

himitsu 5. Mär 2009 16:51

Re: Problem mit TObject.Classname
 
Eigentlich geht es :angel:


wie versuchst du es denn derzeit? (etwas Code wäre eventuell nicht schlecht)

implementation 6. Mär 2009 12:14

Re: Problem mit TObject.Classname
 
Der Aufruf:
Delphi-Quellcode:
procedure TWdServer.WSIDCreate;
begin
  FWSID := NotifyToList(self);
  // mit FWSID := NotifyToList(TObject(self)); hab ichs auch schon versucht
end;
und
Delphi-Quellcode:
type
  TServerList = array[0..1023] of TObject;
var
  ServerList: TServerList;

[...]

function NotifyToList(item: TObject): Word;
var i: Word;
begin
  ...
  ServerList[i] := item;
  ...
end;
Bei "ServerList[i] := item;" wird die AccessViolation ausgelöst.

himitsu 6. Mär 2009 13:51

Re: Problem mit TObject.Classname
 
Zitat:

Zitat von implementation
Delphi-Quellcode:
function NotifyToList(item: PObject): Word;
var i: Word;
begin
  while ItemUsed[i] do Inc(i);
  ItemUsed[i]:=true;
  ServerList[i] := item;
  Result := i;
  OutputLine('WSID '+IntToHex(i,4)+' is stored for a '+item^.ClassName);
end;

meckert Delphi bei dir eigentlich noch wegen dem undefinierten i?

Delphi-Quellcode:
var ServerList: Array[0..1023] of TObject;

function NotifyToList(Item: TObject): Word;
begin
  Result := Low(ServerList);
  while Assigned(ServerList[Result]) do
    if Result < High(ServerList) then Inc(Result)
    else raise Exception.Create('Liste ist voll');
  ServerList[Result] := Item;
  OutputLine(Format('WSID %.4x is stored for a %s', [Result, Item.ClassName]));
end;


// so das Freigeben von Items:
FreeAndNil(ServerList[i]);

implementation 6. Mär 2009 15:54

Re: Problem mit TObject.Classname
 
dann kommt nicht einmal eine Fehlermeldung.
Das Programm bricht einfach ab.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:47 Uhr.
Seite 2 von 2     12   

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