Article View: de.comp.lang.c++
Article #334Re: Q: Adresse einer Methode
From: Reinhard Pfau
Date: Tue, 29 Aug 1995 07:06
Date: Tue, 29 Aug 1995 07:06
58 lines
2270 bytes
2270 bytes
Christian Horn (chorn@cip48.cscip.uni-sb.de) wrote:
: Hi,
: Es ist folgende Klasse gegeben:
: class A
: {
: public:
: void f1(void) {...}
: void f2(void) {...}
: }
: Nun soll die Methode f1 die Adresse von f2 nehmen und sie mittels
: FP_SEG und FP_OFF in Segment und Offset zerlegen.
: Das Problem ist, dass ich zwar die Adresse von f2 erhalte
: (&A::f2), diese aber nicht nach void far* casten kann, um sie dann
: FP_SEG bzw. FP_OFF als Argument uebergeben zu koennen.
: Weiss jemand wie ich von der Methode f2 die Adresse erhalten kann, so
: dass ich sie zerlegen kann?
Ja, sowas brauchte ich auch mal. Leider hast du nicht angegeben,
welchen Compiler du benutzt. Daher folgende
WARNUNG: das folgende ist hochgradig TURBO-C++(3.00)-spezifisch und
ist daher _nicht_ unbedingt auf andere Compiler uebertragbar!!
Es entstand nach der TAE-Methode (Try-And-Error) unter Zuhilfenahme
der Assemblerquelltextgenerierung von TC++ (immer praktisch bei solchen
Problemen...).
So, und jetzt gehts los:
void A::f1 (void) {
struct ptrCombi {
void far* fkt;
void far* ci;
} mp;
unsigned seg,ofs;
*( (void (A::**)(void)) (&mp) ) = &A::f2;
seg = FP_SEG(mp.fkt);
ofs = FP_OFS(mp.fkt);
// --- mach was mit seg, ofs ---
}
: Danke,
: Christian
Bitte, ich hoffe, es hilft.
Ich nehme mal an, dass die anderen Borland-C++-Compiler intern aehnlich
arbeiten. Solltest du einen anderen Compiler benutzen, dann musst du
probieren.
Reinhard.
/-- Reinhard Pfau --- (ED-Pfau) --------------------------------------------\
| eMail: gz342@appl2.hrz.uni-siegen.de | IRC: Mubo | no home-page |
+----------------------------------------------------------------------------+
"Programming is: Force the computer to do what _YOU_ want." (rp)
"Using M$-ware is the opposite!"
Technical Details
Message-ID:
<41ue99$4ip@si-nic.hrz.uni-siegen.de>Path:
arc1-ca.pugleaf.net!appl2.hrz.uni-siegen.de!gz342References:
<41ibde$pnu@hades.rz.uni-sb.de>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!appl2.hrz.uni-siegen.de!gz342 From: gz342@appl2.hrz.uni-siegen.de (Reinhard Pfau) Newsgroups: de.comp.lang.c++ Subject: Re: Q: Adresse einer Methode Date: 29 Aug 1995 07:06:17 GMT Organization: HRZ, UNI/GHS Siegen Message-ID: <41ue99$4ip@si-nic.hrz.uni-siegen.de> References: <41ibde$pnu@hades.rz.uni-sb.de> NNTP-Posting-Host: appl2.hrz.uni-siegen.de X-Newsreader: TIN [version 1.2 PL2]