Статьи Галерея Форум Чат Файлы HowTo Ссылки Поиск
Текущее время: 21 сен 2019, 13:04




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Динамические библиотеки
СообщениеДобавлено: 18 авг 2003, 17:21 
Есть такой код на C ( чисто учебный ):
Динамическая библиотека (libm.so) загружается с помощью функции dlopen,
Потом идёт функция dlsym:

cosine = dlsym( handle, “cos” );

Переменная cosine объявлена как double (*cosine)(double);

Если этот код включен в программу на C, то всё ОК, но если попытаться сделать что-нибудь подобное в C++, то gcc сразу выдаёт ошибку:

./math.cc:19: cannot convert `void *' to `double (*) (double)' in
assignment

Насколько я понимаю, C++ не может автоматически преобразовать указатель типа void в указатель на функцию. Как же в тогда его можно надурить ?

P.S. Если я что-нибудь неправильно понял или плохо объяснил, извините, т.к. программирую второй месяц.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 19 авг 2003, 10:52 
Код:
typedef double (*pfn_cosin)(double);

void * hmodule = dlopen( path, RTLD_LAZY );
if ( hmodule )
{
    pfn_cosin pfn = (pfn_cosin)dlsym( hmodule, "cosin" ); // get function pointer with valid type casting
    if ( pfn )
        (*pfn)(999); // call function
}


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 19 авг 2003, 11:06 
Интересующийся

У нас с: 19.08.2003
Сообщения: 65
Откуда: Anwerpen, Belgium / Belarus
вот... и не надо никого дурить :)
в отличие от С, С++ имеет более строгую типизацию (что хорошо само по себе) и если нужно сделать какие-то преобразования - всегда можно сделать это явно, таким образом если что не так ( а это довольно часто бывает при преобразовании типов ) - то сам виноват и сам себе баклан :D

_________________
www.xenomai.org


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения: Спасибо
СообщениеДобавлено: 19 авг 2003, 21:47 
Спасибо тебе, dimm_coder :P


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
[ All resources are available under GNU GPL ] [ Support ] [ Hosted by DataHata | MyCloud.by ] [ Powered by phpBB® Forum Software © phpBB Group ]

LVEE Winter LVEE Rambler's Top100