У меня есть приложение C, которое я создал в VS2008. Я создаю фиктивную функцию создания, которая переопределяет ссылки на функции в структуре. Однако, если я попытаюсь сделать это прямым способом с чем-то вроде:
void *ptr = &(*env)->GetVersion;
*ptr = <address of new function>
тогда я получаю сообщение об ошибке «C2100: недопустимое косвенное обращение» в виде * ptr, когда ptr является недействительным *, кажется, запрещенной конструкцией Я могу обойти это, используя указатель int / long, сопоставив его с тем же адресом и изменив содержимое длинного указателя:
*structOffsetPointer = &(*env)->GetVersion;
functionPointer = thisGetVersion;
structOffsetPointerAsLong = (long *)structOffsetPointer;
*structOffsetPointerAsLong = (long)functionPointer;
но я обеспокоен тем, что использование указателей long или int вызовет проблемы при переключении между 32 и 64-битными средами.
Так есть ли простой способ отключить эту ошибку? Если нет, то есть ли int или long 64 бита под win64?