| Autor |
Beitrag |
Nuker
      
Beiträge: 16
|
Verfasst: 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
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Di 01.07.03 14:51
Moin...
hmm...vielleicht geht
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 
      
Beiträge: 16
|
Verfasst: 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
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: 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.
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(...
... function FindNukerClass(...):TCLass;
end; |
Is echt easy  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 
      
Beiträge: 16
|
Verfasst: 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
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: 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
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Mi 02.07.03 10:14
Das ist korrekt! Delphi hat eine eigene klasse, um diese zu verwalten:
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 
_________________ mfg.
mâximôv
|
|
Nuker 
      
Beiträge: 16
|
Verfasst: Mi 02.07.03 13:25
_________________ C YA - [BD]Nuker|Zeus:XML
Beware - The Matrix has you!
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: 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
PS: was meinst du mit usw?
_________________ mfg.
mâximôv
|
|
Nuker 
      
Beiträge: 16
|
Verfasst: Mi 02.07.03 14:14
Nein, Nein ... so ein fauler Hund bin ich auch nicht
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
C YA @LL - [BD]Nuker|Project:Zeus
_________________ C YA - [BD]Nuker|Zeus:XML
Beware - The Matrix has you!
|
|