Article View: de.comp.lang.c++
Article #351Re: Q: Adresse einer Methode
From: Reinhard Pfau
Date: Fri, 01 Sep 1995 07:46
Date: Fri, 01 Sep 1995 07:46
50 lines
2566 bytes
2566 bytes
Christian Horn (chorn@cip48.cscip.uni-sb.de) wrote:
: Reinhard Pfau (gz342@appl2.hrz.uni-siegen.de) wrote:
: : 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 ---
: : }
: Vielen Dank, das hat funktioniert (benutze Borland C++ 3.1).
: Koenntest Du den Code vielleicht kommentieren?
Naja, so viel zu kommentieren gibt's da eigentlich nicht.
Bei Borland/Turbo-C++ besteht ein Zeiger auf eine Memberfkt aus 2 Zeigern:
: Was bedeutet die Variable 'ci' in der Struktur?
Einen Zeiger auf die Adresse der Memberfkt und einem zweiten Zeiger,
ueber den ich nur eine Vermutung habe. (ci soll fuer "CurrentInstance"
stehen). Bei der Adresszuweisung wird der 2.Zeiger auf NULL gesetzt.
[SPEKULATION ON]
Ich nehme an, dass er bei 'normaler' Verwendung einer Funktionsvariable
beim Aufruf der Funktion den zugehoerigen this-Zeiger aufnimmt.
[SPEKULATION OFF]
Auf obige Struktur kam ich durch TAE (Try-And-Error); offiziell dokumentiert
habe ich das noch nirgendwo gesehen.
Tja, und die Adresszuweisung ist einer der ueblichen Type-Casts, mit dem
man einem Compiler dazu bringt, einer Struktur einen dazu eigentlich
inkompatiblen Wert zuzuweisen (man castet einen Zeiger auf die Struktur
auf einen Zeiger der zuzuweisenden Struktur und dereferenziert das ganze).
WARNUNG: bei sowas sollte man genau wissen, was man macht; die Fehler-
moeglichkeiten sind sehr hoch, da man dabei die Typpruefung des Compilers
umgeht.
: Nochmals vielen Dank,
: Christian
Gern geschehen. :) 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:
<426dpa$5mj@si-nic.hrz.uni-siegen.de>Path:
arc1-ca.pugleaf.net!appl2.hrz.uni-siegen.de!gz342References:
<41ibde$pnu@hades.rz.uni-sb.de> <41ue99$4ip@si-nic.hrz.uni-siegen.de> <423hdj$2a4@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: 1 Sep 1995 07:46:50 GMT Organization: HRZ, UNI/GHS Siegen Message-ID: <426dpa$5mj@si-nic.hrz.uni-siegen.de> References: <41ibde$pnu@hades.rz.uni-sb.de> <41ue99$4ip@si-nic.hrz.uni-siegen.de> <423hdj$2a4@hades.rz.uni-sb.de> NNTP-Posting-Host: appl2.hrz.uni-siegen.de X-Newsreader: TIN [version 1.2 PL2]