日期:2014-05-16  浏览次数:20695 次

调用动态链接库
想把一个动态链接库中的一个函数给导出来使用,也即导出它的函数地址
于是
int *DataHandle::myfun(void * pdlHandle)
{
    pdlHandle = dlopen("./Dynamic_Lib/mylib.so", RTLD_LAZY); // RTLD_LAZY 延迟加载
    char *pszErr = dlerror();
    if( !pdlHandle || pszErr )
    {
        printf("Load Dynamic-lib failed!\n");
        return NULL;
    }
    void (*fun) (short *, short *, UINT ,UINT ) = dlsym(pdlHandle, "MeetingMixVoice"); // 定位动态链接库中的函数 (即函数指针)  //此句报错.....................................
    if( !fun )
    {
        pszErr = dlerror();
        printf("Find symbol failed!%s\n", pszErr);
        dlclose(pdlHandle);
        return NULL;
    }
return fun;
}
可是这样为什么报如下错误:
错误: 从类型‘void*’到类型‘void (*)(short int*, short int*, UINT, UINT) {aka void (*)(short int*, short int*, unsigned int, unsigned int)}’的转换无效 
调用我封装的这个函数myfun
int *funaddress = myfun(pdlHandle);//得到库中函数地址
于是调用
funaddress(,,,,);//传了四个参数
但是报错说:错误: ‘funaddress’不能用作函数
求解...

------解决方案--------------------