AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Arrays bleiben unverändert - trotz SetLength

Ein Thema von LDericher · begonnen am 15. Okt 2009 · letzter Beitrag vom 15. Okt 2009
Antwort Antwort
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#1

Arrays bleiben unverändert - trotz SetLength

  Alt 15. Okt 2009, 17:41
Komisch.

Wenn ich diese Prozedur (aus einer DLL) calle, bleiben "Vars" und "VarNames" exakt gleich. Muss ich die doch als Referenzparameter oder gar als Zeiger übergeben?
Bin jetzt etwas ratlos... in der Proc werden beide Arrays (die ja intern nur Zeiger sein dürften) nämlich verändert, durch ShowMessage ließ sich das beweisen.
Also, ich lasse den Worten Code folgen:
Delphi-Quellcode:
type
  TParamArray=array of Pointer;
  TVarArray=array of PString;

procedure CREATEVAR(Params:TParamArray; Vars, VarNames:TVarArray);
var
  I:integer;
  Param:string;
begin
Param:=string(GetParam(0, Params, Vars, VarNames));
I:=GetVarIndex(Param, VarNames);
if(I=-1)then
  begin
  SetLength(VarNames, Length(VarNames)+1);
  SetLength(Vars, Length(Vars)+1);
  GetMem(VarNames[I], Length(Param));
  VarNames[I]^:=Param;
  end;
end;
Gruß,
LDer.
"Clicking this button you agree with our Verantwortungsverzicht und Abkommen."
Zitat von Ein unentschlossener Programmierer:
Enabled:=true or false or true or false or true or false;
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Arrays bleiben unverändert - trotz SetLength

  Alt 15. Okt 2009, 17:51
Jo, ist ja auch i.O.

Bei dem Aufruf werden die Pointer je kopiert. Und mit dem Setlength() erstellst du ja ein neues Array und kopierst das alte da rein. Der Aufrufer behält sein Array

==> Wenn du nich tnur die Inhalte sondern auch das Array ändern willst, musste das wohl per Reference machen (var schlüsselwort)
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Arrays bleiben unverändert - trotz SetLength

  Alt 15. Okt 2009, 19:52
Alles klar, funktioniert, danke
Wusste gar net, dass damit das Array kopiert wird

Gruß,
LDer.
"Clicking this button you agree with our Verantwortungsverzicht und Abkommen."
Zitat von Ein unentschlossener Programmierer:
Enabled:=true or false or true or false or true or false;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#4

Re: Arrays bleiben unverändert - trotz SetLength

  Alt 15. Okt 2009, 20:44
Bei diesen Parametern wird IMMER kopiert.
Und Arrays/Strings unterliegen einem automatischen Speichermanagement seitens Delphi.

CONST-Parameter werden nicht kopiert, aber sie lassen sich auch nicht ändern

VAR-Parameter werden ebenfalls nicht kopiert und es wird das Original verändert.


Einzig und alleine die Interfaces und Objekte und andere Zeiger fallen etwas aus der Reihe.
Hier wird zwar (ohne CONST/VAR) auch der "Zeiger" kopiert, aber nicht das worauf gezeigt wird.
Also das Objekt (dessen Inhalt) läßt sich so ändern (als wäre es als VAR definiert), aber nicht der Zeiger zum Objekt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 00:05 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