Addresse einer Funktion herausfinden
-
Ok vielen Dank

-
BOol schrieb:
&lol und lol ergibt aber immer 1

Ein reines Ausgabeproblem. Wie bereits gesagt wurde, liefert der Funktionsname die Adresse.
IIRC (das Thema gab es hier schon mal) gibt es keine Überladung des Stream Operators << für Funktionen. Dann wird die genommen, die am besten passt. Und das ist bool. Und da keine Funktionsadresse ein Nullzeiger ist, erhälst du als Ausgabe halt immer 1. Lösung des Problems: bei Adressen immer nach void* casten.cout << static_cast<void*>(&fkt);btw:
du bist im falschen Forum
-
Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
So,bevor ich einen neuen Thread erstelle push ich lieber den

Wie kann ich einem Funktionspointer,sagen wirvoid (*fkt)(void);eine Addresse zuweisen?Er soll dann also immer beim Aufruf von Fkt
die Funktion an der Addresse aufrufen!Danke im voraus!
-
Hallo
typedef void (*MyFuncType)(void); // Definition des FP-Types ... void Function() // Funktion passend zum FP-Typ { }; ... MyFuncType fp = Function; // Deklaration und Zuweisung eines FP fp(); // Ausführen der Funktion hinter dem FPbis bald
akari
-
Das weiß ich schon

Aber wie kann ich dem Pointer eine Addresse zuweisen,z.b. 0x4014a7Danke im voraus.
-
Die Frage ist, wozu brauchst du dass? Weißt du etwa genau, bei welcher Adresse deine Funktion landet, wenn du dein Programm ausführst?
-
Kannst alles mögliche machen. Obs funktioniert ist ne andere frage.
z.B.:#include <iostream> class Test { private: private: private: private: private: private: private: private: private: private: virtual void SecretFunction() { std::cout << "Secret function called" << std::endl; } }; int _tmain(int argc, _TCHAR* argv[]) { typedef void (*MyFuncType)(void); Test t; MyFuncType fp = (MyFuncType)((int*)((int*)&t)[0])[0]; fp(); return 0; }oder du schreibst fp = (MyFuncType)0x12345;
-
Hallo
Das weißt bereits dem pointer eine Adresse zu, und zwar die der angegebenen Funktion. Etwas anders als eine gültige Funktion solltest du dort auch nicht zuweisen.
MyFuncType fp = Function;/Edit : ach bin ich langsam
bis bald
akari
-
Ne ich will in meiner DLL,die ich in einen Prozess lade,eine Funktion des Prozesses
nutzen...spart viel Arbeit
Danke im voraus!
-
Edit:Hab Seite 2 nicht gesehen,Danke werds dann mal versuchen

-
templäd schrieb:
Obs funktioniert ist ne andere frage.
Guter Punkt - und bei deinem Code dürfte vermutlich nur Müll herauskommen (selbst wenn du mit dem Index-Gekurve tatsächlich die Adresse von SecretFunction() findest, fehlt dir auf jeden Fall ein this-Zeiger für den Funktionsaufruf).
PS: Dem Compiler ist es übrigens egal, ob du einmal oder hundertmal "private:" vor die Definition setzt

-
Die privates waren naja da damit's nicht untergeht (Vielleicht 3 4 zu viel).
Der this Zeiger wird ja zum Glück nicht verwendet.
-
templäd schrieb:
Die privates waren naja da damit's nicht untergeht (Vielleicht 3 4 zu viel).
Da reicht einer völlig aus (für den Compiler auf jeden Fall - und für einen menschlichen Leser ist ein sinnvoller Kommentar auch besser).
Der this Zeiger wird ja zum Glück nicht verwendet.
Selbst wenn er nicht benötigt wird - die Methode erwartet diesen Parameter auf dem Stack. Und da ist es dann Glückssache, was sie macht (bei virtuellen Funktionen kann es durchaus noch sein, daß sie einige Vorbereitungen treffen müssen, die den this-Pointer benötigen).
PS: Aber es ist noch nichtmal garantiert, daß du mit deinem Programm wirklich in der SecretFunction() rauskommst.
-
Nochmal zurück zu dem eigentlichen Problem:
BOol schrieb:
Ne ich will in meiner DLL,die ich in einen Prozess lade,eine Funktion des Prozesses
Mit Funktionszeigern macht man das in cpp nicht mehr.
Ich würde der Funktion aus der dll ein interface übergeben.