Динамические библиотеки

Все о программировании под *nix
Anonymous

Динамические библиотеки

Сообщение Anonymous »

Есть такой код на 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. Если я что-нибудь неправильно понял или плохо объяснил, извините, т.к. программирую второй месяц.

dimm_coder

Сообщение dimm_coder »

Код: Выделить всё

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
}

dimm_coder
Интересующийся
Сообщения: 65
Зарегистрирован: 19 авг 2003, 10:56
Откуда: Anwerpen, Belgium / Belarus
Контактная информация:

Сообщение dimm_coder »

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

Anonymous

Спасибо

Сообщение Anonymous »

Спасибо тебе, dimm_coder :P

Ответить