调用动态链接库
想把一个动态链接库中的一个函数给导出来使用,也即导出它的函数地址
于是
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’不能用作函数
求解...
------解决方案--------------------