Getting the Address of a Function with FP_SEG and FP_OFFLast reviewed: July 17, 1997Article ID: Q35295 |
5.10 6.00 6.00a 6.00ax 7.00 | 5.10 6.00 6.00a | 1.00
MS-DOS | OS/2 | WINDOWSkbprg kbcode
The information in this article applies to:
SUMMARYIn Microsoft C versions 5.0, 5.1, 6.0, 6.0a, 6.0ax, C/C++ version 7.0, and Visual C++ 1.0, to get the segment and offset of a function named myfunc, declare a pointer to a function, assign myfunc to that pointer, and use FP_SEG and FP_OFF to get the segment and offset from the pointer.
MORE INFORMATIONIf the sample program below is compiled for the tiny, small or compact memory models, the segment value will be zero. This is because in these memory models a function pointer is a near (offset only) pointer. The following sample code demonstrates this process:
Sample Code
/* Compile options needed: none */ #include <dos.h> #include <stdio.h> int myfunc( void ); int (*myfunc_ptr)(); unsigned int seg_val; unsigned int off_val; void main( ){ /* set the pointer to the function */ myfunc_ptr = myfunc; /* use FP_SEG() and FP_OFF() to get segment and offset */ seg_val = FP_SEG(myfunc_ptr); off_val = FP_OFF(myfunc_ptr); printf( "Segment is %d\nOffset is %d\n", seg_val, off_val );}
int myfunc(){ }
|
Additional reference words: kbinf 5.10 6.00 6.00a 6.00ax 7.00 1.00
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |