![]() |
Re: Variant + varStrArg = was ist das?
Ich meine, du könntest den Variant doch einfach "wie einen String" (das ist ja eienr der Vorteile) benutzen. Bei einem Boolean würde dann z.B. "True" oder "False" in der XML-Datei stehen, bei einem Integer die entsprechend in einen Text umgewandelte Zahl usw. Beim Einlesen (bzw. genauergesagt bei der Benutzung des Wertes) wird der Wert dann von Delphi wieder komvertiert. Nur bei Objekten müsste man noch eine Spezialbehandlung einführen, um diese auch noch zu serialisieren, alles andere macht Delphi ja schon selbst.
[Edit] Also, was ich meine, ist, statt
Delphi-Quellcode:
geht auch einfach
varShortInt: Begin
Node := AddNode(List[i].Name); SavePropInfos(Node, List[i]); Node.Attributes['variant'] := 'ShortInt'; Node.Data := IntToStr(TVarData(V).VShortInt); End;
Delphi-Quellcode:
[/Edit]
Node.Data := V;
|
Re: Variant + varStrArg = was ist das?
Du musst auf jeden Fall noch den Typen mitspeichern. Sonst kommen nur Strings zurück.
|
Re: Variant + varStrArg = was ist das?
Zitat:
|
Re: Variant + varStrArg = was ist das?
Wenn in der XML-Datei nur "1234" steht, ist nicht mehr zu bestimmen, ob das mal ein String oder eine Zahl war.
|
Re: Variant + varStrArg = was ist das?
klar könnte ich "einfacher" umwandeln, aber jetzt kommt noch varArray und varByRef dazu, wo ich eh genauer auf den Typen eingehen muß, also kann ich doch auch gleich alles "selber" zerlegen und umwandeln?
|
Re: Variant + varStrArg = was ist das?
Schau mal, so oder so ähnlich sollte es gehen.
Das Beispiel stammt aus einer Wmi-Geschichte:
Delphi-Quellcode:
Gruß
function GetArrayContent(FWMIObj: ISWbemObject; PropName: string): string;
var idx: Integer; RS : String; begin RS := '['; if (VarIsNull(FWMIObj.Properties_.Item(PropName, 0).Get_Value)) or (VarArrayHighBound(FWMIObj.Properties_.Item(PropName, 0).Get_Value, 1) <= 0) then RS := RS + ']' else begin for idx := 1 to VarArrayHighBound(FWMIObj.Properties_.Item(PropName, 0).Get_Value, 1) do RS := RS + VarToStr(FWMIObj.Properties_.Item(PropName, 0).Get_Value[idx]) + ', '; end; if Length(RS) > 2 then RS := Copy(RS, 1, Length(RS) - 2) + ']'; Result := RS; end; |
Re: Variant + varStrArg = was ist das?
Der Witz daran ist, das ein Variant auch wiederrum ein Variant oder gar ein Variant-Array enthalten kann ... also diese Dinger sind schon irgendwie krank und sowas von verwurschtelt :shock:
[add] Ach ja und ich nutze die Unit Variants nicht, sondern nur die Definitionen/Möglichkeiten der Unit System. :stupid: Ich weiß ja nicht ob der Typ Variant überhaupt verwendet wird, was wohl oftmals garnicht der Fall sein muß/wird, drum wollte ich diese Unit (Variants) garnicht erst einbinden. ok, hab grad mitbekommen, daß seitdem ich TStream verwende die Units Variants via Classes eingebunden wird :wall: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 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