Я столкнулся с чем-то, чего я полностью не понимаю.Существует прототип функции:
typedef void ( * TMain ) ( void );
и переменная функции:
TMain myFunc = MyFunc;
...
myFunc ();
Конечно, это работает нормально.Почему бы и нет.
Из MAP-файла я знаю, что «MyFunc» находится по адресу 0x20100.А теперь самое смешное.После назначения "myFunc = MyFunc;"переменная "myFunc" не содержит значение 0x20100, а скорее 0x20101!
Моя проблема заключается в том, что мне нужно вызвать функцию, адрес которой я знаю из таблицы.Поэтому я подумал, что смогу сделать это так
myFunc = ( TMain ) myTable [ 5 ]; // that would be 0x20100
myFunc (); // which produces a proper crash
Однако, если я сделаю
myFunc = ( TMain ) ( ( Int8 * ) myTable [ 5 ] + 1 );
myFunc ();
, тогда это сработает.
Что здесь происходит?Всегда ли мне нужно добавлять смещение в 1 или это более или менее случайно?Или есть лучший (и рабочий) способ выполнить задачу?
Большое спасибо за любую подсказку.Walter