Связывание с жестко закодированным указателем на функцию - PullRequest
1 голос
/ 03 декабря 2010

Я знаю, что определенная функция с известной подписью находится по известному адресу. Как инициализировать указатель на функцию в C ++?

Я попробовал следующее (и многие его варианты) безрезультатно:

int (*FunctionName)(int arg1, long arg2, char *arg3) = (int (*FunctionName)(int arg1, long arg2, char *arg3))0xCAKE;

У меня такое ощущение, что это выражение справа вызывает проблемы, так как код будет компилироваться, если он инициализирован в 0x0 / NULL. Есть указатели? (Пун намеревался).

Ответы [ 2 ]

5 голосов
/ 03 декабря 2010

Помимо того факта, что CAKE не является правильным шестнадцатеричным значением, поскольку K не является допустимым шестнадцатеричным символом, плюс любые проблемы, связанные с различными типами указателей, ваша главная ошибка заключается в том, что FunctionName является переменной, а не типом.Это похоже на выполнение

px = (px)0xBADFACE;

, где px - обычный указатель

Если вы удалите FunctionName справа, оставляя остальные, это может сработать, но проще будетtypedef.

typedef int( *FuncType)(int arg1, long arg2, char * arg3 );
FuncType FunctionName = (FuncType)(0xCAFE);
2 голосов
/ 03 декабря 2010
int (*FunctionName)(int arg1, long arg2, char *arg3) = (int ( * )(int arg1, long arg2, char *arg3))0x01;

Работает в VS2008.Имя_функции - это имя переменной, а не часть типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...