ID: Q35295
5.10 6.00 6.00a 6.00ax 7.00 | 5.10 6.00 6.00a | 1.00
MS-DOS | OS/2 | WINDOWS
kbprg kbcode
The information in this article applies to:
- Microsoft C for MS-DOS, versions 5.1, 6.0, 6.0a, and 6.0ax
- Microsoft C for OS/2, versions 5.1, 6.0, and 6.0a
- Microsoft C/C++ for MS-DOS, version 7.0
- Microsoft Visual C++ for Windows, version 1.0
In 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.
If 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:
/* 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 KBCategory: kbprg kbcode KBSubcategory: CRTIss Keywords : kb16bitonly
Last Reviewed: July 18, 1997