PRB: INVOKE Pushes SS to Convert NEAR PTR to FAR PTRLast reviewed: January 9, 1995Article ID: Q95414 |
The information in this article applies to:
SYMPTOMSWhen an application passes a parameter of type NEAR PTR to a routine that expects an argument of type FAR PTR, the INVOKE directive converts the NEAR PTR to a FAR PTR by pushing the SS segment register on the stack. The assembler does not issue any warnings when it applies this conversion. In a situation where SS does not equal DS, as in a Windows dynamic-link library (DLL), INVOKE may generate incorrect code.
CAUSEWhen the assembler converts a NEAR PTR to a FAR PTR, it uses the SS segment register when it has no other information about the appropriate segment value.
RESOLUTIONWhen your application passes a NEAR PTR parameter to a function that expects a FAR PTR, specify the segment register to use in the conversion by adding the appropriate segment prefix (cs:, ds:, es:, or ss:) to the parameter. The code example below demonstrates this method.
Sample Code; Assemble options needed: none .MODEL small, C, farstack func1 PROTO arg1:FAR PTR BYTE .CODE func2 PROC, arg2:NEAR PTR BYTE INVOKE func1, arg2 ; This pushes ss:arg2 retfunc2 ENDP func3 PROC, arg2:NEAR PTR BYTE INVOKE func1, ds:arg2 ; This pushes ds:arg2 retfunc3 ENDP END
|
Additional reference words: 6.00 6.00a 6.00b 6.10 6.10a
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |