near Pointer to far Pointer Conversions Use DSLast reviewed: July 17, 1997Article ID: Q98412 |
6.00 6.00a 6.00ax 7.00 | 6.00 6.00a | 1.00 1.50
MS-DOS | OS/2 | WINDOWSkbtool The information in this article applies to:
SUMMARYWhen an application uses more than one memory model, pointer conversions must be performed correctly. The compiler converts a near pointer to a far pointer using the current value of the DS (data segment) register as the segment value.
MORE INFORMATIONThis behavior may cause a problem when the application converts a near pointer returned from a function to a far pointer and compares it to NULL. If the value of the near pointer is NULL, when the application converts it to a far pointer its value is DS:0000h, which cannot be equal to NULL. If the application must use more than one memory model, it can force the segment value to be 0h with the C run-time macro FP_SEG, as demonstrated below.
Sample Code
/* * Compile options needed: none */ #include <stdio.h> #include <dos.h> char __near *func(void){ return NULL;}
void main(void){ char _far *cptr; cptr = func(); // Set segment value to DS FP_SEG(cptr) = 0; // Set segment value back to 0}
|
Additional reference words: kbinf 1.00 1.50 6.00 6.00a 6.00ax 7.00 8.00
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |