Article ID: 168932
Article Last Modified on 9/18/2003
/* Compiler options: Use .cpp extension or /Tp switch */
#include <stdio.h>
void *pBase = (void*)0x00010000;
void *pGlobal = (void*)0x00010000;
void __based(pBase)* SomeFunction()
{
static void* pv = (void*)0x00010000;
return( void __based(pBase)* )pv;
}
void main()
{
int __based(pBase)* test1;
/* The following conversion always fails. A possible
solution is to have SomeFunction() simply return a
void*.
*/
test1 = ( int __based(pBase)* )SomeFunction();
printf( "Conversion 1 = %08X, should be 00000000\n",
(unsigned long)test1 );
/* This conversion fails on some versions. In this
example, the double conversion isn't necessary.
*/
test1 = ( int __based(pBase)* )( (void __based(pBase)*)
((void*)0x00010000) );
printf( "Conversion 2 = %08X, should be 00000000\n",
(unsigned long)test1 );
/* This conversion always works.
*/
test1 = ( int __based(pBase)* )( ( void __based(pBase)* )
pGlobal );
printf( "Conversion 3 = %08X, should be 00000000\n",
(unsigned long)test1 );
}
Output: Conversion 1 = FFFF0000, should be 00000000 Conversion 2 = 00010000, should be 00000000 Conversion 3 = 00000000, should be 00000000
Keywords: kbbug kbcompiler KB168932