AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML WSDL Dynamische Arrays als Property und Setlength ???
Thema durchsuchen
Ansicht
Themen-Optionen

WSDL Dynamische Arrays als Property und Setlength ???

Ein Thema von 4dk2 · begonnen am 22. Feb 2013 · letzter Beitrag vom 12. Apr 2013
Antwort Antwort
4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#1

WSDL Dynamische Arrays als Property und Setlength ???

  Alt 22. Feb 2013, 10:22
Hi Leute,
habe nen problem beim WSDL Importieren,
Un zwar schmeisst der sowas raus, wie das auf der wiki von emba
http://docwiki.embarcadero.com/RADSt...DL-Option_-Or-

also:
Code:
type aerie = array of string;

type
  raptorInfo = class //class(TRemotable)
  private
    FHawks: aerie;
  published
    property Hawks: aerie read FHawks write FHawks;
  end;
Das problem ist wenn man jetzt was dem Array Hawks zuweisen will geht das ja nicht, weil
es ja ein Property vom typ array ist und nicht z.b. sowas:
Code:
property Hawks[Index: Integer]: string read GetAerieStr write SetAerieStr;
Das heisst ich kann mit dem Teil aus dem emba Beispiel kann doch auch garnix anfangen,
das gleiche wie bei meinem WSDL...

Weil:

Code:
procedure TFMain.Button2Click(Sender: TObject);
var r:raptorInfo;
begin
  r:=raptorInfo.Create;
  try
    //SetLength(r.Hawks,1); //= [dcc32 Fehler] uFMain.pas(198): E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden
    r.Hawks[0]:='asd'; //= Exception, da die länge von Hawks = 0, ist ja nirgengs die länge gesetzt worden
  finally
    r.Free;
  end;

end;
Wie kann man auf array properties zugreifen, OHNE die Klasse zu verändern?
Ich weiss ich könnte ja die implementierung mit Getter, Setter für das Array anlegen,
aber da das nen bisl kompliziertere WSDL files sind, und evlt nochn paar mal verändert werden
will ich nix an dem WSDL import ändern, sondern möglichst alles nur duch ableiten usw.
Leider Kann man mit dem Class Helper (ich benutz xe3..) nicht auf private Felder zugreifen

Irgendeine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.172 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: WSDL Dynamische Arrays als Property und Setlength ???

  Alt 22. Feb 2013, 10:26
Du solltest deine Delphi-Version angeben
An WSDL/SOAP-Support wurde zwischen diversen Versionen einiges geändert so das hier die genaue Delphi-Version hilfreich wäre.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#3

AW: WSDL Dynamische Arrays als Property und Setlength ???

  Alt 22. Feb 2013, 10:34
Jo hast recht, sorry XE3 update 2
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.435 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: WSDL Dynamische Arrays als Property und Setlength ???

  Alt 22. Feb 2013, 15:48
Also im Prinzip funktioniert es wie es soll:
Delphi-Quellcode:
procedure TFMain.Button2Click(Sender: TObject);
var
  r: raptorInfo;
  h: aerie;
begin
  r := raptorInfo.Create;
  try
    h := r.Hawks;
    SetLength(h, 1);
    h[0] := 'asd';
    r.Hawks := h;
  finally
    r.Free;
  end;
end;
Ist halt nicht wirklich schön so.
  Mit Zitat antworten Zitat
4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#5

AW: WSDL Dynamische Arrays als Property und Setlength ???

  Alt 27. Feb 2013, 07:20
Danke @Blup

Habe auch noch eine möglichkeit gefunden:
Code:
type raptorInfoHelper = class helper for raptorInfo
  published

    procedure AddEntry; inline;
end;

implementation

procedure raptorInfoHelper.AddEntry;
var a:^aerie;
begin
   a:=addr(self.FHawks);
   setlength(a^,1);
end;
//--------------------------

procedure TFMain.Button2Click(Sender: TObject);
var r:raptorInfo;
begin
  r:=raptorInfo.Create;
  try
    r.AddEntry;
    r.Hawks[0]:='asd';
  finally
    r.Free;
  end;

end;
auch nicht schön aber geht

und dann die schönere :
Die hatte erst nen Fehler ausgelöst...
Code:
procedure raptorInfoHelper.AddEntry2;
begin
   setlength(self.FHawks,1);
end;
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: WSDL Dynamische Arrays als Property und Setlength ???

  Alt 27. Feb 2013, 07:31
Du brauchst nur ein Element im Array?
Wieso dann nicht so:

Delphi-Quellcode:
type raptorInfoHelper = class helper for raptorInfo
   published
     procedure SetEntry (aHawk : String); inline;
 end;

 implementation

 procedure raptorInfoHelper.SetEntry (aHawk : String);
 var a: ^aerie;
 begin
    a:= addr(self.FHawks);
    setlength(a,1);
    a^[0] := aHawk;
 end;
 //--------------------------

 procedure TFMain.Button2Click(Sender: TObject);
 var r:raptorInfo;
 begin
   r:=raptorInfo.Create;
   try
     r.SetHawk('asdf');
   finally
     r.Free;
   end;
 end;
Dann ist die Logik komplett da, wo sie hingehört und kann von vielen Stellen aus so aufgerufen werden. Letzte Frage wäre aber, ob die Gegenstelle das auch so versteht. Tut sie das?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:55 Uhr.
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