首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

dlsym的不解,求解惑

2012-09-02 
dlsym的疑惑,求解惑我学习调用动态链接库,查了很多资料。发现网上有两个版本的用法版本1 :void (*MeetingMi

dlsym的疑惑,求解惑
我学习调用动态链接库,查了很多资料。
发现网上有两个版本的用法

版本1 :
void (*MeetingMixVoice)(short *, short *, UINT, UINT );//定义函数指针

dlopen()...
//然后直接这样用就可以
 MeetingMixVoice = dlsym(pdlHandle, "Mixpcm"); // 定位动态链接库中的函数 

版本2
void (*MeetingMixVoice)(short *, short *, UINT, UINT );//定义函数指针

dlopen()...
//然后要这样用才行!!!!!
 *(void **)(&MeetingMixVoice) = dlsym(pdlHandle, "Mixpcm"); // 定位动态链接库中的函数 

个人倾向于第一种版本,而且我发现CSDN得牌的人有的就是版本1的写法。
可是为什么我写成版本1时报错:
错误: 从类型‘void*’到类型‘void (*)(short int**, short int*, UINT, UINT) {aka void (*)(short int**, short int*, unsigned int, unsigned int)}’的转换无效 [-fpermissive]|
第二种 *(void **)(&MeetingMixVoice)时不报错,但这样写是什么意思???
真心疑惑了,求解惑啊!

[解决办法]
void *dlsym(void *handle, const char *symbol);
函数返回值是 void*

*(void **)(&MeetingMixVoice):将函数指针 强制转化成 void*指针

热点排行