Re: Указательна функцию
От: Alex_Avr Россия  
Дата: 17.11.05 19:31
Оценка:
Здравствуйте, artem_kos, Вы писали:


_>int main(int argc,char *argv[])

_>{
_> double (*cosine)(double);
_> void *handle = dlopen("/usr/lib/libm.so",RTLD_LAZY);
_> if(handle == NULL)
_> {
_> printf("error");
_> exit(1);
_> }
_> cosine = dlsym(handle,"cos"); ///// на этой строчке ошибка
_> if(cosine == NULL)
_> {
_> printf("error");
_> exit(1);
_> }
_> printf("%f",(*cosine)(2.0));
_> dlclose(handle);

_>}

_>error: invalid conversion from `void*' to `double (*)(double)'

Дело в том, что функция dlopen возвращает указатель на void, который нужно явным образом привести
к типу твоей функции:

cosine  = (double (*)(double))dlsym(handle,"cos");


а еще лучше определить тип указателя на функцию с нужной тебе сигнатурой:
typedef double (*cos_ptr_func)(double); // объявление типа указателя на функцию, cos_ptr_func - имя типа
cos_ptr_func cosine = (cos_ptr_func)dlsym(handle,"cos");


P.S. Для оформления кода в сообщении лучше использовать тэг [ccode], это повышает читаемость.
С уважением, Александр Авраменко.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.