




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、您还未登录!|登录|注册|帮助csdn首页资讯论坛博客下载搜索更多cto俱乐部学生大本营培训充电移动开发软件研发云计算程序员tup我一路走来-宁来虎一样的敌人,别来猪一样的战友!条新通知登录注册欢迎退出我的博客配置写文章文章管理博客首页 全站 当前博客 空间博客好友相册留言用户操作留言 发消息 加为好友 tingsking18id:tingsking18此用户是csdn博客专家如何成为专家 ?共1425196次访问,排名28,好友274人,关注者235人。tingsking18的文章原创 126 篇翻译 0 篇转载 48 篇评论 238 篇订阅我的博客 编辑tingsking18的公告 鸽写的
2、不是代码,是寂寞!编辑文章分类asp、c#c/c+c+ builderc+库delphijavajavascriptlinux&unixmeegopythonqtvcwcfwindows编程面向对象和uml数据库杂乱情感正则表达式中间件编辑我的好友c+ gui programming with qt 4focusonacekevins的天空lijiji_1515os x书籍(rss)os x资源(rss)pimshellpsdkzhaoyihui888张硕(cathyeagle)暗金装备杨德龙的专栏(rss)王中王的blog王立卫编程手札马说存档2010年08月(1)2010年0
3、6月(4)2010年05月(1)2010年04月(10)2010年03月(3)2010年02月(1)2010年01月(8)2009年12月(17)2009年11月(18)2009年10月(2)2009年09月(6)2009年08月(8)2009年07月(8)2009年06月(2)2009年05月(8)2009年04月(5)2009年03月(14)2007年08月(1)2007年04月(1)2007年03月(3)2007年02月(3)2007年01月(2)2006年11月(1)2006年10月(1)2006年09月(1)2006年08月(2)2006年07月(2)2006年06月(1)2006年
4、05月(4)2006年04月(5)2006年03月(11)2006年02月(20)公告: 第三届中国云计算大会 7.5折票价抢购中! 意见反馈官方博客 qt源码解析(五)qlibrary跨平台调用动态库的实现 收藏 此文于2010-01-04被推荐到csdn首页如何被推荐?版权声明请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。qt源码解析(一) qt创建窗口程序、消息循环和winmain函数qt源码解析(二)深入剖析qt元对象系统和信号槽机制qt源码解析(三)深入剖析qt元对象系统和信号槽机制(续)qt源码解析(
5、四)剖析qt的事件机制原理qt源码解析(五)qlibrary跨平台调用动态库的实现qt源码解析(六)qt信号槽机制与事件机制的联系qt源码解析(七)qt创建窗体的过程 qt源码解析(八)qt是如何处理windows消息的qt源码解析(九)解析qdatetime1)win下动态库调用有关的函数包括: (1)loadlibrary,装载动态库。 (2)getprocaddress,获取要引入的函数,将符号名或标识号转换为dll内部地址。 (3)freelibrary,释放动态链接库。2)unix上与动态库调用有关的函数包括:(1)_打开动态链接库:dlopen,函数原型void *dlopen (
6、const char *filename, int flag); dlopen用于打开指定名字(filename)的动态链接库,并返回操作句柄。 (2)取函数执行地址:dlsym,函数原型为: void *dlsym(void *handle, char *symbol); dlsym根据动态链接库操作句柄(handle)与符号(symbol),返回符号对应的函数的执行代码地址。 (3)关闭动态链接库:dlclose,函数原型为: int dlclose (void *handle); dlclose用于关闭指定句柄的动态链接库,只有当此动态链接库的使用计数为0时,才会真正被系统卸载。 (4)
7、动态库错误函数:dlerror,函数原型为: const char *dlerror(void); 当动态链接库操作函数执行失败时,dlerror可以返回出错信息,返回值为null时表示操作函数执行成功。我们来分析下qt的源代码,看看qt是如何封装这两种不同的调用动态库的方法。下面是我用vc编写的一个动态库中的函数add:extern c _declspec(dllexport) int _stdcall add(int a,int b) return a+b;下面我就用qlibrary来调用一下:qlibrary lib(qtdlltest.dll);if (lib.load() typed
8、ef int(*addfunction)(int a,int b); addfunction add=(addfunction)lib.resolve(add); if (!add) coutfailedendl; else int m; m=add(1,1); /来个计算1+1 coutresult:mendl; lib.unload();else coutfailedendl;首先将目录切换到qtdirsrccorelibplugin,这里面就是qlibrary实现的源代码,打开qlibrary_p.h(熟悉了qt的常用手法,就知道,这就是qlibrary内部实现的代码),可以看到 boo
9、l load_sys(); bool unload_sys(); void *resolve_sys(const char *);三个函数。在qlibrary.cpp中可以找到调用这三个函数的地方bool qlibrary:load ()调用了load_sys;bool qlibrary:unload ()调用了unload_sys;void * qlibrary:resolve ( const char * symbol )调用了resolve_sys但是并没有找到这三个函数的实现,这是这么回事呢?打开qtdirsrccorelibpluginplugin.pri文件,win32 sourc
10、es += plugin/qlibrary_win.cppunix sources += plugin/qlibrary_unix.cpp原来如此啊。我们仔细看下qlibrary_win.cpp文件,load_sys函数调用了loadlibrary,unload_sys调用了freelibrary,resolve_sys调用了getprocaddress。而在qlibrary_unix.cpp文件中,各种linux平台又分好多种。但是基本上load_sys调用了dlopen,unload_sys调用了dlclose,resolve_sys调用了dlsym。在hpux中dlopen对应shl_l
11、oad,dlclose对应shl_unload,dlsym对应shl_findsym。原来qlibrary就是这样实现不同平台动态库的调用。发表于 2010年01月04日11:27:00 | 评论( 2 ) | 编辑| 举报| 收藏 旧一篇:qt源码解析(四)剖析qt的事件机制原理 | 新一篇:qt源码解析 文章索引-查看最新精华文章 请访问博客首页相关文章linux系统共享库编程linux中动态链接库总结jni的用法linux 动态加载 动态链接库dlopen api利用ld_preload给glibc库函数加钩子c 标准库 函数 源代码的实现 和 分析android jni 学习笔记1ra
12、oyou 发表于2010年1月5日 10:41:50 ip:举报回复删除mm304321141 发表于2010年11月12日 14:33:13 ip:125.34.47.*举报回复删除qlibrary lib(qtdlltest.dll); 这里不应该有扩展名,qt会自动处理,毕竟win和unix下动态库扩展名是不同的。发表评论表 情: 评论内容: 用 户 名:登录 注册 匿名评论 匿名用户验 证 码: 重新获得验证码 热门招聘职位【诺姆四达ehr】高薪诚聘软件系统工程师、java工程师、数据库工程师、测试工程师【e人e本】热招各类开发人才(android、java、php),更多职位,点击进
13、入【中国知网】高薪诚聘精英技术人才【广东美成达】移民公司诚聘asp.net程序员【热聘】搜狐畅游全国热招开发工程师【七雄争霸研发商:北京游戏谷】诚聘java、c+技术专家及各类游戏精英【华北计算技术研究所】急聘java开发、系统架构、需求分析【西安瑞祺科技】诚聘java软件工程师【雅邦网络】诚聘网站项目经理、java技术总监、java开发、网站测试工程师【科锐】诚招it中高级人才,抢工作机会,赢ipad啦!【imo】-国际风投+福利租房+奖金+期权+不加班+调休,邀你共创互联网的奇迹【yoho!新力传媒】高薪诚聘各类网站人才 北京+南京【诺姆四达ehr】高薪诚聘软件系统工程师、java工程师、
14、数据库工程师、测试工程师【e人e本】热招各类开发人才(android、java、php),更多职位,点击进入【中国知网】高薪诚聘精英技术人才【广东美成达】移民公司诚聘asp.net程序员【热聘】搜狐畅游全国热招开发工程师【七雄争霸研发商:北京游戏谷】诚聘java、c+技术专家及各类游戏精英【华北计算技术研究所】急聘java开发、系统架构、需求分析【西安瑞祺科技】诚聘java软件工程师【雅邦网络】诚聘网站项目经理、java技术总监、java开发、网站测试工程师【科锐】诚招it中高级人才,抢工作机会,赢ipad啦!【imo】-国际风投+福利租房+奖金+期权+不加班+调休,邀你共创互联网的奇迹【yoho!新力传媒】高薪诚聘各类网站人才 北京+南京 公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告北京创新乐知信息技术有限公司 版权所有, 京 icp 证 070598 号世纪乐知(北京)网络技术有限公司 提供技术支持江苏乐知网络技术有限公司 提供商务支持 email:copyright 1999-2010, csdn.net, all rights reserv
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省黄石市2024-2025学年高三5月考试题语文试题试卷含解析
- 云南医药健康职业学院《专业英语阅读》2023-2024学年第一学期期末试卷
- 四川司法警官职业学院《数字信号处理及实验》2023-2024学年第二学期期末试卷
- 贵州财经大学《软件工程及UM》2023-2024学年第二学期期末试卷
- 北京警察学院《工程计量与计价(安装)》2023-2024学年第一学期期末试卷
- 吉林铁道职业技术学院《马克思主义经典文献导读》2023-2024学年第一学期期末试卷
- 河北资源环境职业技术学院《大坝工程设计》2023-2024学年第二学期期末试卷
- 辽宁商贸职业学院《统计基础与实务》2023-2024学年第二学期期末试卷
- 迪庆藏族自治州德钦县2025年三下数学期末学业水平测试模拟试题含解析
- 华大新2025年高补班下学期第三次月考化学试题含解析
- DB11-T 1526-2018 地下连续墙施工技术规程
- 风电制氢项目可行性研究报告
- 加气站安全生产奖惩规定模版(3篇)
- 细胞治疗政策环境分析-洞察分析
- 2024-2030年中国玄武岩纤维工业行业现状调研及投资战略研究报告
- 公园景观修复零星维修施工方案
- 挂靠免责协议书范本
- 小学数学青岛版五年级下册《异分母分数大小比较与通分》课件
- 社区矫正考试题及答案
- 幼儿园水池建设方案
- 安徽省宿州市省、市示范高中2024-2025学年高一上学期期中教学质量检测英语试题 含解析
评论
0/150
提交评论