I have a C application that I’ve created in VS2008. I am creating a mock creation function that overrides function references in a struct. However if I try and do this in a straight forward fashion with something like:
void *ptr = &(*env)->GetVersion; *ptr = <address of new function>
then I get a ‘error C2100: illegal indirection’ error as *ptr, when ptr is a void * seems to be a banned construct. I can get around it by using a int/long pointer as well, mapping that to the same address and modifying the contents of the long pointer:
*structOffsetPointer = &(*env)->GetVersion; functionPointer = thisGetVersion; structOffsetPointerAsLong = (long *)structOffsetPointer; *structOffsetPointerAsLong = (long)functionPointer;
but I am concerned that using long or int pointers will cause problems if I switch between 32 and 64 bit environments.
So is there are easy way to disable this error? Assuming not, is either int or long 64 bits under win64?
Then how about:
The right way to do this is to work with the type system, avoid all the casting and declare actual pointers to functions like:
The above assumes GetVersion is of type fncPtr and NewFunction is declared as int NewFunction(void);