Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi proceduren eines arrays als pointer übergeben (https://www.delphipraxis.net/16071-proceduren-eines-arrays-als-pointer-uebergeben.html)

empanyc 9. Feb 2004 20:28


proceduren eines arrays als pointer übergeben
 
Hi,

ich habe in ner DLL ein Array von Objekten.
Diese Objekte haben ein paar Prozeduren und Funktionen.
Diese möchte ich nun per Funktion an das Hauptprogramm übergeben.
Nur, wenn ich etwas in dieser Art übergebe:

Delphi-Quellcode:
function getfkt : pointer;
begin
 getfkt := obj_array[5].gewuenschte_fkt;
end;
kommt "variable erforderlich".
Ich habe nach Recherche solche Konstruktionen gefunden:

Delphi-Quellcode:
...
 getfkt := tobj_array.gewuenschte_fkt;
...
Dies bringt zwar keinen Fehler, funktioniert aber nicht.
Ist ja auch logisch, da man ja so nicht festlegen kann, von
welchem Objekt nun die Funktion übergeben wird.
"Normale" Fkt/Prozeduren übergeben ist kein Problem, nur sobald
die in nem Array stecken gibts Probleme.

Weiss jemand wie ich es anstellen muss?

Danke!
Mario

Sanchez 9. Feb 2004 20:43

Re: proceduren eines arrays als pointer übergeben
 
Hi,

du musst einen Typ definieren. ca so

Delphi-Quellcode:
type
  TIrgendwas = function : double;

...

function getfkt : TIrgendwas;
begin
  result := obj_array[5].gewuenschte_fkt;
end;
Wenn mich nicht alles täuscht müsste es so funktionieren.

grüße, daniel

empanyc 9. Feb 2004 21:11

Re: proceduren eines arrays als pointer übergeben
 
Ja gut, aber die Funktion soll halt verschiedene Prozeduren
unterschiedlicher Signatur zurückgeben.
Mit Pointern funktioniert das ganz gut, solange die Fkt/Prozeduren
sich nicht in nem Array befinden.

Im Hauptprogramm hab ich dann schon solche Tmeine_fkt = procedure...
denen ich dann die zurückgelieferten Pointer der Fkt zuweise.
Aber Fkt soll halt universell sein und des geht halt nur mit
Pointern.

Trotzdem danke!
Gruß
Mario

Bernd Ua 9. Feb 2004 21:18

Re: proceduren eines arrays als pointer übergeben
 
Mit nem Pointer kann das nicht gehen.
Methodenzeiger sind quasi ein Doppelzeiger, da neben der Codeadresse auch die Objektadresse enthält
( woher sollte self in der Methdoe sonst kommen ) wird.
Minimum für den Rückgabewert ist also so etwas wie TMethod

Bernd

empanyc 9. Feb 2004 21:23

Re: proceduren eines arrays als pointer übergeben
 
Ich meinte es soweit getestet zu haben, dass es erst nicht mehr funktionierte,
sobald ich es in ein Array gesteckt habe.

Ich versteh jetzt deine Argumentation nicht ganz.
Es ist mir doch recht, dass beides im Pointer "drinsteckt".
Ich will ja gerade eben mit diesem Pointer genau die Prozedur von dem
einen bestimmten Objekt starten.

gruß
mario

Bernd Ua 9. Feb 2004 21:27

Re: proceduren eines arrays als pointer übergeben
 
Es steckt nicht beides in einem Pointer es sind zwei Pointer !
SizeOf(TMethod) = 8 !!

empanyc 9. Feb 2004 21:37

Re: proceduren eines arrays als pointer übergeben
 
Achso.
Gut, kann ich dann net einfach beides übergeben?

So in der Art:
Delphi-Quellcode:
pointer1 := @mein_obj;
pointer2 := @mein_obj.fkt;
(nur das die zweite Zeile nicht funktioniert...)
Und ich es im Hauptprogramm wieder zusammensetze?

gruß
mario
*ehrgeizigbin* ;)

Bernd Ua 9. Feb 2004 21:50

Re: proceduren eines arrays als pointer übergeben
 
Wieso reite ich wohl so auf TMethod rum ?

Delphi-Quellcode:
 TMethod = record
    Code, Data: Pointer;
  end;
:mrgreen:

empanyc 9. Feb 2004 22:07

Re: proceduren eines arrays als pointer übergeben
 
Achso! :mrgreen:

Hab gedacht, des wär ein "Pseudo"-typ von dir.

Werd des in dem Fall morgen gleich mal austesten.

thx
mario

empanyc 10. Feb 2004 21:58

Re: proceduren eines arrays als pointer übergeben
 
Ich hätt nochmal ne frage:
Lässt sich die Funktion, durch einen TMethod-Typ identifiziert, direkt
aufrufen, oder muss ich die TMethod-Daten erst wieder einem
äquivalenten Objekttyp zuweisen und dann über diesen die Fkt aufrufen?

Vielen Dank!
Mario


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:40 Uhr.
Seite 1 von 2  1 2      

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