Microsoft KB Archive/35295

From BetaArchive Wiki

Getting the Address of a Function with FP_SEG and FP_OFF


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: - The C Run-time (CRT), included with: - 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 ---------------------------------------------------------------------- SUMMARY ======= 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. MORE INFORMATION ================ 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: Sample Code ----------- /* Compile options needed: none */ #include #include 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
Issue type :
Technology : kbVCsearch kbAudDeveloper kbCRT

Last Reviewed: May 5, 2001
© 2001 Microsoft Corporation. All rights reserved. Terms of Use.