🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #334

Re: Q: Adresse einer Methode

#334
From: Reinhard Pfau
Date: Tue, 29 Aug 1995 07:06
58 lines
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!gz342
References: <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]