版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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&unixMeegopythonQTVC推荐精选WCFwindows编程面向对象和UML数据库杂乱情感正则表达式中间件编辑我的好友C+ GUI Programming with Qt 4FocusOnACEKevins的天空lijiji_1515OS X书籍(RSS)OS X资源(RSS)pimshellpsdkzhaoyihui888张硕(CathyEagle)暗金装备杨德龙的专栏(RSS)王中王的Blog王立卫编程手札马说存档2010年08月(1)2010年
3、06月(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)
4、2006年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
6、*dlopen (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时,才会真正被
7、系统卸载。 (4)动态库错误函数: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("QtDllTes
8、t.dll");if (lib.load() typedef int(*AddFunction)(int a,int b); AddFunction Add=(AddFunction)lib.resolve("add"); if (!Add) cout<<"failed"<<endl; else int m; m=Add(1,1); /来个计算1+1 cout<<"result:"<<m<<endl; lib.unload();else cout<<&q
9、uot;failed"<<endl;推荐精选首先将目录切换到QTDIRsrccorelibplugin,这里面就是QLibrary实现的源代码,打开qlibrary_p.h(熟悉了Qt的常用手法,就知道,这就是QLibrary内部实现的代码),可以看到 bool load_sys(); bool unload_sys(); void *resolve_sys(const char *);三个函数。在qlibrary.cpp中可以找到调用这三个函数的地方bool QLibrary:load ()调用了load_sys;bool QLibrary:unload ()调用了un
10、load_sys;void * QLibrary:resolve ( const char * symbol )调用了resolve_sys但是并没有找到这三个函数的实现,这是这么回事呢?打开QTDIRsrccorelibpluginplugin.pri文件,win32 SOURCES += plugin/qlibrary_win.cppunix SOURCES += plugin/qlibrary_unix.cpp原来如此啊。我们仔细看下qlibrary_win.cpp文件,load_sys函数调用了LoadLibrary,unload_sys调用了FreeLibrary,resolve_s
11、ys调用了GetProcAddress。而在qlibrary_unix.cpp文件中,各种linux平台又分好多种。但是基本上load_sys调用了dlopen,unload_sys调用了dlclose,resolve_sys调用了dlsym。在HPUX中dlopen对应shl_load,dlclose对应shl_unload,dlsym对应shl_findsym。原来QLibrary就是这样实现不同平台动态库的调用。发表于 2010年01月04日11:27:00 | 评论( 2 ) | 编辑| 举报| 收藏 旧一篇:QT源码解析(四)剖析Qt的事件机制原理 | 新一篇:QT源码解析 文章索引
12、-查看最新精华文章 请访问博客首页相关文章Linux系统共享库编程Linux中动态链接库总结JNI的用法linux 动态加载 动态链接库dlopen API利用LD_PRELOAD给glibc库函数加钩子C 标准库 函数 源代码的实现 和 分析android JNI 学习笔记1raoyou 发表于2010年1月5日 10:41:50 IP:举报回复删除mm304321141 发表于2010年11月12日 14:33:13 IP:125.34.47.*举报回复删除QLibrary lib("QtDllTest.dll"); 这里不应该有扩展名,Qt会自动处理,毕竟Win和un
13、ix下动态库扩展名是不同的。发表评论表 情: 评论内容: 用 户 名:登录 注册 匿名评论 匿名用户验 证 码: 重新获得验证码 推荐精选 热门招聘职位【诺姆四达EHR】高薪诚聘软件系统工程师、JAVA工程师、数据库工程师、测试工程师【E人E本】热招各类开发人才(Android、java、PHP),更多职位,点击进入【中国知网】高薪诚聘精英技术人才【广东美成达】移民公司诚聘ASP.net程序员【热聘】搜狐畅游全国热招开发工程师【七雄争霸研发商:北京游戏谷】诚聘JAVA、C+技术专家及各类游戏精英【华北计算技术研究所】急聘Java开发、系统架构、需求分析【西安瑞祺科技】诚聘JAVA软件工程师【雅
14、邦网络】诚聘网站项目经理、JAVA技术总监、JAVA开发、网站测试工程师【科锐】诚招IT中高级人才,抢工作机会,赢IPAD啦!【imo】-国际风投+福利租房+奖金+期权+不加班+调休,邀你共创互联网的奇迹【YOHO!新力传媒】高薪诚聘各类网站人才 北京+南京【诺姆四达EHR】高薪诚聘软件系统工程师、JAVA工程师、数据库工程师、测试工程师【E人E本】热招各类开发人才(Android、java、PHP),更多职位,点击进入【中国知网】高薪诚聘精英技术人才【广东美成达】移民公司诚聘ASP.net程序员【热聘】搜狐畅游全国热招开发工程师【七雄争霸研发商:北京游戏谷】诚聘JAVA、C+技术专家及各类游
15、戏精英【华北计算技术研究所】急聘Java开发、系统架构、需求分析【西安瑞祺科技】诚聘JAVA软件工程师【雅邦网络】诚聘网站项目经理、JAVA技术总监、JAVA开发、网站测试工程师【科锐】诚招IT中高级人才,抢工作机会,赢IPAD啦!【imo】-国际风投+福利租房+奖金+期权+不加班+调休,邀你共创互联网的奇迹【YOHO!新力传媒】高薪诚聘各类网站人才 北京+南京 公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告北京创新乐知信息技术有限公司 版权所有, 京 ICP 证 070598 号世纪乐知(北京)网络技术有限公司 提供技术支持江苏乐知网络技术有限公司 提供商务支持 Email:webmasterCopyright ©
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 语音变异的认知研究-洞察分析
- 细胞骨架与细胞质膜相互作用-洞察分析
- 水质监测技术研究与应用-洞察分析
- 新兴市场进入策略-洞察分析
- 双底形态分类与识别-洞察分析
- 隧道隧道支护结构-洞察分析
- 体育场地安全监控系统-洞察分析
- 《诗歌鉴赏之景象》课件
- 再生水厂委托运营协议书(2篇)
- 2025年沪科新版二年级语文下册阶段测试试卷
- 中华民族共同体概论专家讲座第一讲中华民族共同体基础理论
- 湖北省襄阳市2023-2024学年高一上学期期末考试化学试题(含答案)
- 浙江省金华市十校2023-2024学年高一上学期1月期末考试物理试题 含解析
- 物业管理师考试题库单选题100道及答案解析
- 校园智能安防系统安装合同
- 2024年专利代理人专利法律知识考试试卷及参考答案
- 2024-2025学年九年级上学期化学期中模拟试卷(人教版2024+含答案解析)
- 江苏大学《操作系统》2023-2024学年期末试卷
- 《国际经济与贸易》考试复习题库(含答案)
- 高中日语(新版标准日本语初级上册)全册复习总结课件
- 2024年国家开放大学本科《知识产权法》第一至四次形考任务试题及答案
评论
0/150
提交评论