AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Delphi vertauscht Variablen bei Funktionsaufruf ? wös?
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi vertauscht Variablen bei Funktionsaufruf ? wös?

Ein Thema von Daniel · begonnen am 12. Okt 2010 · letzter Beitrag vom 12. Okt 2010
Antwort Antwort
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#1

Delphi vertauscht Variablen bei Funktionsaufruf ? wös?

  Alt 12. Okt 2010, 11:32
Delphi-Version: 2007
Moin,

also das ist ja 'n Ding. Ich habe folgende Funktion:

Function MyFunction(i : Integer; r1, r2, r3, r4, r5 : single ) : string; Die rufe ich mit festen Parametern auf: FFormelString := MyFunction( 1, 2.00, 3.00, 4.00, 5.00, 6.00 ); So weit, so gut. Wenn Delphi nicht meine fünf Parameter r1 bis r5 in der Reihenfolge umdrehen würde. Der Debugger zeigt's so an und wenn ich mir in der Funktion die Variablen ausgeben lassen, dann wird es bestätigt: r1 = 6, r2 = 5, r3 = 4, r4 = 3, r5 = 2.


Die Fragestellung, welche Variable wo landen soll, kannte ich bisher nur aus dem Kontext von DLLs. Aber hier reden wir über eine EXE-Datei, in der das passiert. Kann sich - und dann mir - einer erklären, was hier passiert?
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Delphi vertauscht Variablen bei Funktionsaufruf ? wös?

  Alt 12. Okt 2010, 11:34
Sowas hatte ich noch nie.
Wäre auch böse, wenn soein Fehler generell auftreten würde
und es wäre schon längt behoben.

Vielleicht bist du ja auf einen Compilerfehler gestoßen?
In 'nem Test tritt es jedenfalls nicht auf.
Delphi-Quellcode:
Function MyFunction(i : Integer; r1, r2, r3, r4, r5 : single ) : string;
begin
  Result := IntToStr(i);
  Result := Result + ' ' + FloatTostr(r1);
  Result := Result + ' ' + FloatTostr(r2);
  Result := Result + ' ' + FloatTostr(r3);
  Result := Result + ' ' + FloatTostr(r4);
  Result := Result + ' ' + FloatTostr(r5);
  // auch über ein gemeinsammes Format nix Anderes
end;

procedure TForm5.FormCreate(Sender: TObject);
begin
  Caption := MyFunction( 1, 2.00, 3.00, 4.00, 5.00, 6.00 );
end;
Nutzt du hier die Standard-Aufrufkonventionen bei dieser Funktion, bzw. in der aufrufenden Funktion.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (12. Okt 2010 um 11:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Delphi vertauscht Variablen bei Funktionsaufruf ? wös?

  Alt 12. Okt 2010, 11:39
Eventuell falsche Aufrufkonvention verwendet? Sowas kommt vor, wenn man mal ein stdcall oder so vergisst
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Delphi vertauscht Variablen bei Funktionsaufruf ? wös?

  Alt 12. Okt 2010, 11:39
Scheint sich um ( eine falsche) cdecl Aufrufskonvention zu handeln
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.618 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi vertauscht Variablen bei Funktionsaufruf ? wös?

  Alt 12. Okt 2010, 11:42
Ich dachte, es ist keine DLL? Auf meinem Delphi 2007 kann ich das jedenfalls nicht nachvollziehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Delphi vertauscht Variablen bei Funktionsaufruf ? wös?

  Alt 12. Okt 2010, 11:42
War auch mein erster Verdacht. Aber erstens gibt man eigentlich in Delphi für eigene Routinen keine Aufrufkonvention an und zweitens hätte Daniel das wohl erwähnt bzw. man sieht es auch am Code, dass keine eigene Aufrufkonvention angegeben wurde.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Delphi vertauscht Variablen bei Funktionsaufruf ? wös?

  Alt 12. Okt 2010, 11:46
bzw. man sieht es auch am Code, dass keine eigene Aufrufkonvention angegeben wurde.
Nicht wenn er es im Interface angegeben hat.

Also innerhalb der EXE wird ja überall die selbe Deklaration verwendet.
Bei der DLL können es unterschiedliche Deklarationen sein, welche sich dann natürlich unterscheiden könnten.

Darum würde ich hier entweder auf eine alte/falsche/fehlerhafte DCU tippen (alles neu Erzeugen würde das klären, aber ich glaub eher nicht dran),

oder eben ein Compiler-Fehler.
Also wo der Compiler irgendwie durcheinander kommt und irgendwo/-wie mit der Reihenfolge durcheinander kommt.
Immerhin kennt er ja mehrere Aufrufkonventionen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Delphi vertauscht Variablen bei Funktionsaufruf ? wös?

  Alt 12. Okt 2010, 11:49
Eventuell liegt auch an anderer Stelle ein Fehler im Code vor, der den Compiler durcheinander bringt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Delphi vertauscht Variablen bei Funktionsaufruf ? wös?

  Alt 12. Okt 2010, 12:03
Merkwürdig.
Ich habe alle DCUs weggelöscht, die Optimierung erst an, dann ausdrücklich wieder ausgeschaltet und alles neu erzeugt. Nu kommt zwar das richtige Ergebnis raus, aber der Debugger zeigt mir nach wie vor die falsche Reihenfolge.

Im Aufrufpfad konnte ich keine Angaben von Aufrufkonventionen finden. In einem Mini-Projekt kann ich das ebenfalls nicht nachvollziehen. hm.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Delphi vertauscht Variablen bei Funktionsaufruf ? wös?

  Alt 12. Okt 2010, 12:05
Der Compiler scheint aber fälschlicherweise eine anzunehmen
Markus Kinzler
  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 07:28 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