Microsoft KB Archive/35295

{|
 * width="100%"|

Getting the Address of a Function with FP_SEG and FP_OFF

 * }

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: - 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( &quot;Segment is %d\nOffset is %d\n&quot;, 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