C / C ++ приведение void * к int (* ()) (int,…);

0

Как я могу наложить void* на int ( *() ) (int,...)?

void* исходит от dlsym. Этот код не компилируется:

typedef  int ( *PSYS () ) (int,...);
PSYS getf =  (PSYS) dlsym(lib, "function" );
  • 0
    почему ты хочешь разыграть void * в другой тип?
  • 0
    @haccks Потому что void* - это то, что возвращает dlsym .
Показать ещё 9 комментариев
Теги:
pointers
function-pointers

2 ответа

1
Лучший ответ

PSYS - это тип функции, а не указатель на функцию. Вы хотите

typedef  int ( *PSYS () ) (int,...);
PSYS* getf =  (PSYS*) dlsym(lib, "function" );
  • 0
    Geat, компиляция работает, я просто боюсь segfaults сейчас ^^. Спасибо
  • 0
    @ Ododo Предположительно, это не segfault на этой линии, но где-то еще. Удачи в отладке. :-)
1

Если символ является указателем на функцию, ваш typedef может быть неправильным. Должно быть:

typedef int (*PSYS)(int, ...);
  • 0
    нет, на самом деле это указатель на функцию, возвращающий указатель на функцию
  • 0
    То есть символ, который вы пытаетесь получить, это указатель на функцию, возвращающий указатель на функцию? Если так, это дико. Так это полезная функция, чтобы получить другие функции в библиотеке?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню