Autor Beitrag
Nuker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 01.07.03 13:58 
Halli Hallo

Ich hab folgendes Problem :

Ich besitze Delphi 6 Enterprise Edition. Darin enthalten ist die Komponenten TXMLDocument.

Des weiteren wird der Typ IXMLNode als Interface Typ und TXMLNode als
TInterfacedObject mit dem Interface IXMLNode.

Ich will entweder TXMLNode oder IXMLNode mit der Prozedur RegisterClass() registrieren, allerdings benötigt diese Prozedur die Klasse TPersistent. Wie kann ich IXMLNode bzw. TXMLNode umwandeln ?? Der Operator "as" funzt nicht und versuch ichs mit einer normalen Typumwandlung "TPersistentClass( TXMLNode )" gibts eine Zugriffsverletzung.

Bitte helft mir !!!

Bis dann,
C YA @ll - [ BD ]Nuker

_________________
C YA - [BD]Nuker|Zeus:XML
Beware - The Matrix has you!
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 01.07.03 14:51 
Moin...

hmm...vielleicht geht

ausblenden Quelltext
1:
TPersistent( TXMLNode )					


?

Aber vielleicht ist es sinnvoller, deine eigene register-routine, für die XMLs, zu schreiben. Kannste einfach n array nehmen und alles nötige selbst verwalten...?

_________________
mfg.
mâximôv
Nuker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 01.07.03 15:21 
Nein, so einfach gehts leider nicht...

Da kommt wieder eine riesen Zugriffsverletzung.

Einen simplen Array kann ich leider auch nicht machen, weil ich ja auch die ganzen Einstellungen und Attribute von IXMLNode verwende, so wie ParentNode, etc..

_________________
C YA - [BD]Nuker|Zeus:XML
Beware - The Matrix has you!
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 01.07.03 15:37 
Nuker hat folgendes geschrieben:
...Einen simplen Array kann ich leider auch nicht machen, weil ich ja auch die ganzen Einstellungen und Attribute von IXMLNode verwende, so wie ParentNode, etc..


da hast du mich falsch verstanden...natürlich nicht als ersatz für XML (wär ja albern), sondern als ersatz für die registerClass funktion von delphi. Die macht ja auch nix anderes, als sich eine klasse, mit dem dazugehörigen namen, zu merken.

zB.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
type 
  TClassRec = record
    name : string[128];
    class : TClass;
    valid : boolean;
  end;
  
  TClassArr : array of TClassRec;

vat classReg:TClassArr ;
...
procedure registerNukerClass(aName:string;aClass:TClass);
var n:integer;
begin
  n := length(classReg);
  setLength(classReg,n+1);
  classReg[n].name := aName;
  classReg[n].class := aClass
  classReg[n].valid := true;
end;

procedure UnRegisterNukerClass(...
// nur das valid auf false setzen!

...
function FindNukerClass(...):TCLass;
// alle valid = false einträge beim suchen überspringen!

  
end;


Is echt easy :wink: hoffe du hast meinen ansatz verstanden?

_________________
mfg.
mâximôv


Zuletzt bearbeitet von maximus am Mi 02.07.03 14:28, insgesamt 1-mal bearbeitet
Nuker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mi 02.07.03 09:11 
Ach sooooo :-) ....

Da hab ich dich wirklich falsch verstanden :-)...

Hmm... ich werds mal ausprobieren !! THX !!

C YA @LL

_________________
C YA - [BD]Nuker|Zeus:XML
Beware - The Matrix has you!
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Mi 02.07.03 09:36 
maximus hat folgendes geschrieben:
sondern als ersatz für die registerClass funktion von delphi. Die macht ja auch nix anderes, als sich eine klasse, mit dem dazugehörigen namen, zu merken.

Ein bisschen mehr macht sie schon, sonst würde es keine AV geben, wenn man einen Klasse in TPersistent typecastet, die gar nicht von TPersistent abgeleitet ist.

RegisterClass benutzt eine TList und kein Array.

_________________
Ist Zeit wirklich Geld?
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mi 02.07.03 10:14 
Das ist korrekt! Delphi hat eine eigene klasse, um diese zu verwalten:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
 TRegGroups = class
  private
    FGroups: TList;
    FLock: TRTLCriticalSection;
    FActiveClass: TPersistentClass;
    function FindGroup(AClass: TPersistentClass): TRegGroup;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Activate(AClass: TPersistentClass);
    procedure AddClass(ID: Integer; AClass: TPersistentClass);
    function GetClass(const AClassName: string): TPersistentClass;
    function GroupedWith(AClass: TPersistentClass): TPersistentClass;
    procedure GroupWith(AClass, AGroupClass: TPersistentClass);
    procedure Lock;
    procedure RegisterClass(AClass: TPersistentClass);
    procedure RegisterClassAlias(AClass: TPersistentClass; const Alias: string);
    function Registered(AClass: TPersistentClass): Boolean;
    procedure StartGroup(AClass: TPersistentClass);
    procedure Unlock;
    procedure UnregisterClass(AClass: TPersistentClass);
    procedure UnregisterModuleClasses(Module: HMODULE);
    property ActiveClass: TPersistentClass read FActiveClass;
  end;


er kann sich natürlich hinsetzen und diese funktionen für seine klassen schreiben...doch den ganzen sche*** braucht er vermutlich nicht! Deshalb eine lösung die einfach ist und funktioniert :wink:

_________________
mfg.
mâximôv
Nuker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mi 02.07.03 13:25 
:cry: :cry: :cry: :cry:

Tja ... das ist das Problem Jungs ... habs grad gemerkt ...

Ich brauch doch einige dieser Funktionen und ich hab keine Lust das alles neu zu machen :cry: :cry: :cry:

GetClass, AddClass, Unregister, usw... brauch ich alles ...

:cry: :cry: :cry: :cry:

_________________
C YA - [BD]Nuker|Zeus:XML
Beware - The Matrix has you!
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mi 02.07.03 13:59 
Wo is da das prob?

muss ja keine klasse sein und wenns nur die drei funktionen sind, dann dürfe der anfang, von oben (mit array) doch recht schnell gemacht sein.

wenn du nett fragst, dann schreib ich dir den rest schnell runter :wink:


PS: was meinst du mit usw?

_________________
mfg.
mâximôv
Nuker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mi 02.07.03 14:14 
Nein, Nein ... so ein fauler Hund bin ich auch nicht :wink:

Habs jetzt mitlerweile auch geschafft... mit einer Übergangslösung...

Hab einen Script Parser geschrieben und hab dafür die registrierten Klassen benötigt. Hab mir selbst eine Übergangsklasse für IXMLNode geschrieben und dies wird dann zur Laufzeit in IXMLNode umgewandelt und dann wieder ganz normal behandelt.

Trotzdem ein RIESEN DANKE an euch :D :D :D

C YA @LL - [BD]Nuker|Project:Zeus

_________________
C YA - [BD]Nuker|Zeus:XML
Beware - The Matrix has you!