Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi freiwillige Parameter (https://www.delphipraxis.net/101156-freiwillige-parameter.html)

jjep 9. Okt 2007 09:57

Re: freiwillige Parameter
 
Zerbrecht euch nicht den Kopf wegen mir.
Meine Funktion funktioniert super.
Danke

sirius 9. Okt 2007 11:01

Re: freiwillige Parameter
 
Zitat:

Zitat von jjep
Zerbrecht euch nicht den Kopf wegen mir.
Meine Funktion funktioniert super.
Danke

Es geht auch manchmal im Forum um prinzipielle Fragen von Lösungen (welche jetzt besser ist ect.) die durch simple Anfängerfragen ausgelöst werden und dann mehrere Seiten lang werden kann. :stupid:

SirThornberry 9. Okt 2007 11:08

Re: freiwillige Parameter
 
Das bei cdecl es möglich ist verschieden viel auf den Stack zu packen war mir schon klar. Was mich dabei interessiert. Kann man irgendwie feststellen wieviel auf dem Stack liegt?

Muetze1 9. Okt 2007 11:24

Re: freiwillige Parameter
 
Nur, wenn du den originalen Stack Pointer weisst - also ESP bevor der Aufrufer angefangen hat die Parameter auf den Stack zu legen...

sirius 9. Okt 2007 13:26

Re: freiwillige Parameter
 
Nur über Umwege:
Man gibt als ersten Parameter mit, wieviele noch kommen. Oder der letzte Parameter ist ein definierter Wert.

Muetze1 9. Okt 2007 13:33

Re: freiwillige Parameter
 
Zitat:

Zitat von sirius
Oder der letzte Parameter ist ein definierter Wert.

Nicht eher der Erste? Der Letzte ist immer ESP-4...

sirius 9. Okt 2007 13:59

Re: freiwillige Parameter
 
Ich meinte nicht auf dem Stack, sondern einfach in Pascal gedacht :zwinker:
(wenn z.B. Parameter "c" -1 ist, dann gibt es kein "d" mehr)

Muetze1 9. Okt 2007 14:07

Re: freiwillige Parameter
 
Aso, stimmt, so kann man das auch noch betrachten. Klaro, wäre auch eine Möglichkeit...

Win32.API 9. Okt 2007 14:14

Re: freiwillige Parameter
 
Ueber diesen Umwege wuerde es gehen:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  windows;

procedure foo(i1,i2,i3 : Integer); cdecl;
var
   dwReturnAddress,dwParamCount : DWord;
begin
  asm
    push dword ptr [ebp + 4]
    pop [dwReturnAddress]
  end;

  dwParamCount := pByte(dwReturnAddress + 2)^ div 4;
  writeln(dwParamCount);
end;

begin
  foo(1,2,3);
  readln;
end.

sirius 9. Okt 2007 14:21

Re: freiwillige Parameter
 
Solange es weniger als 33 Parameter sind :mrgreen:

Edit: Muss mich korrigieren. Auf Grund von Big Endian klappt es auch, dass man auf einen integer mit pByte zugreifen kann --> also kleiner 65 Parameter


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 Uhr.
Seite 2 von 2     12   

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