当前位置: 技术问答>linux和unix
dlsym的疑惑,求解惑
来源: 互联网 发布时间:2017-03-08
本文导语: 我学习调用动态链接库,查了很多资料。 发现网上有两个版本的用法 版本1 : void (*MeetingMixVoice)(short *, short *, UINT, UINT );//定义函数指针 dlopen()... //然后直接这样用就可以 MeetingMixVoice = dlsym(pdlHandle, "Mixpcm");...
我学习调用动态链接库,查了很多资料。
发现网上有两个版本的用法
版本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)时不报错,但这样写是什么意思???
真心疑惑了,求解惑啊!
发现网上有两个版本的用法
版本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*指针
函数返回值是 void*
*(void **)(&MeetingMixVoice):将函数指针 强制转化成 void*指针
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。