AGB  ·  Datenschutz  ·  Impressum  







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

Prozedur aufrufen

Offene Frage von "hboy"
Ein Thema von hboy · begonnen am 16. Apr 2004 · letzter Beitrag vom 22. Apr 2004
Antwort Antwort
Seite 1 von 3  1 23      
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#1

Prozedur aufrufen

  Alt 16. Apr 2004, 00:18
Hallo,
noch jemand wach ? cool. danke.

Ich habe folgendes prob:

ich will einen Pointer entgegennehmen der auf eine existierende Prozedur zeigt.

procedure entgegennehmen(procptr: Pointer); ok den Pointer über geb ich mit

entgegennehmen(@meineprozedur); So aber wie ruf ich diese Prozedur am andern ende des Pointers auf und vor allem wie übergeb ich der Parameter ???

PS: Windows kann das ( Siehe EnumWindows( EnumProc: Pointer;..)
Power is nothing without TControl
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#2

Re: Prozedur aufrufen

  Alt 16. Apr 2004, 04:58
Zuerst brauchst Du eine Deklaration des übergebenen Prozedurtyps:
Delphi-Quellcode:
type
  TMyProc = procedure(const Value: string);
Damit besteht dann die Möglichkeit den übergebenen Pointer auszuwerten:
Delphi-Quellcode:
procedure Entgegennehmen(ProcPtr: Pointer);
var
  MyProc: TMyProc;
begin
  @MyProc := ProcPtr;
  MyProc('42');
end;
MfG,
Tryer
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#3

Re: Prozedur aufrufen

  Alt 16. Apr 2004, 11:24
hey cool danke.

kann ich die übergebenen parameter vielleicht auch allgemein halten ( als array ? so dass man alle möglichen Prozeduren mit den entsprechenden Parametern aufrufen kann ?

der Format-Befehl nimmt auch so ne array entgegen
Power is nothing without TControl
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Prozedur aufrufen

  Alt 16. Apr 2004, 11:50
Schau mal in der OH, oder hier nach Variant (z.B. Variante Arrays, Variante Typen ...)
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 maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Prozedur aufrufen

  Alt 16. Apr 2004, 11:59
Warum nicht gleich...

Delphi-Quellcode:
procedure Entgegennehmen(ProcPtr: TMyProc);
begin
  ProcPtr('42');
end;
??
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#6

Re: Prozedur aufrufen

  Alt 16. Apr 2004, 12:43
ich speichere die Parameter und rufe die Prozedur nach einem anegegebenen Zeitintervall wieder auf.

Wenns gar nich will werde ich wohl bisschen assemblern müssen ( der die Parameter werden in form eines Stacks in EBP übergeben); dann muss ich eigentlich nur die Werte ( Pointer oder vielleicht sinds auch schon integer oder andere 32bit werte) retten, in ner Array speichern, dann wieder auf den stack pushen und die Prozedur aufrufen ?

Jemand ne Ahnung ob das so geht ?
Power is nothing without TControl
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#7

Re: Prozedur aufrufen

  Alt 16. Apr 2004, 18:17
Delphi Hilfe

Bei Verwendung der Konventionen pascal, cdecl, stdcall und safecall werden alle Parameter im Stack übergeben. Bei der Konvention pascal werden die Parameter in der Reihenfolge ihrer Deklaration (von links nach rechts) übergeben, so dass der erste Parameter im Stack an der obersten Adresse und der letzte Parameter an der untersten Adresse gespeichert wird. Bei den Konventionen cdecl, stdcall und safecall werden die Parameter in der entgegengesetzten Reihenfolge ihrer Deklaration (von rechts nach links) übergeben, so dass der erste Parameter im Stack an der untersten Adresse und der letzte an der obersten Adresse gespeichert wird.

Bei der Konvention register werden maximal drei Parameter in den CPU-Registern übergeben, der Rest im Stack. Die Parameter werden in der Reihenfolge ihrer Deklaration übergeben (wie bei der Konvention pascal). Die ersten drei geeigneten Parameter stehen in den Registern EAX, EDX und ECX (in dieser Reihenfolge). Nur reelle, variante und strukturierte Typen sowie Methodenzeiger- und Int64-Typen sind als Registerparameter ungeeignet. Sind mehr als drei mögliche Registerparameter vorhanden, werden die ersten drei in EAX, EDX und ECX übergeben. Die restlichen Parameter werden in der Reihenfolge ihrer Deklaration im Stack abgelegt. Ein Beispiel:

procedure Test(A: Integer; var B: Char; C: Double; const D: string; E: Pointer);
Power is nothing without TControl
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#8

Re: Prozedur aufrufen

  Alt 16. Apr 2004, 18:25
aber wie bring ich jetzt die parameter auf den Stack ?
push EBP ? geht das nicht einfacher ? und muss ich so nicht für jeden typ unterscheiden ?
Power is nothing without TControl
  Mit Zitat antworten Zitat
16. Apr 2004, 18:35
Dieses Thema wurde von "Christian Seehase" von "Windows API" nach "Sonstige Fragen zu Delphi" verschoben.
Geht um Delphi Interna, nicht Windows
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#10

Re: Prozedur aufrufen

  Alt 18. Apr 2004, 12:16
hat jemand eine Idee wie ich die parameter übergeb ?
Power is nothing without TControl
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 01:21 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