Qt调用跨平台库讲解学习.docx

上传人:b****3 文档编号:27541894 上传时间:2023-07-02 格式:DOCX 页数:10 大小:19.07KB
下载 相关 举报
Qt调用跨平台库讲解学习.docx_第1页
第1页 / 共10页
Qt调用跨平台库讲解学习.docx_第2页
第2页 / 共10页
Qt调用跨平台库讲解学习.docx_第3页
第3页 / 共10页
Qt调用跨平台库讲解学习.docx_第4页
第4页 / 共10页
Qt调用跨平台库讲解学习.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

Qt调用跨平台库讲解学习.docx

《Qt调用跨平台库讲解学习.docx》由会员分享,可在线阅读,更多相关《Qt调用跨平台库讲解学习.docx(10页珍藏版)》请在冰豆网上搜索。

Qt调用跨平台库讲解学习.docx

Qt调用跨平台库讲解学习

 

Qt调用跨平台库

您还未登录!

|登录|注册|帮助

CSDN首页资讯论坛博客下载搜索更多CTO俱乐部学生大本营培训充电移动开发软件研发云计算程序员TUP我一路走来---

宁来虎一样的敌人,别来猪一样的战友!

条新通知

登录注册欢迎

退出

我的博客

配置

写文章

文章管理

博客首页

全站当前博客空间博客好友相册留言用户操作

[留言][发消息][加为好友]

tingsking18ID:

tingsking18

此用户是CSDN博客专家

如何成为专家?

共1425196次访问,排名28,好友274人,关注者235人。

tingsking18的文章

原创126篇

翻译0篇

转载48篇

评论238篇

订阅我的博客

[编辑]tingsking18的公告

鸽写的不是代码,是寂寞~!

[编辑]文章分类

asp、

C#

C/C++

C++Builder

C++库

Delphi

JAVA

JavaScript

linux&unix

Meego

python

QT

VC

WCF

windows编程

面向对象和UML

数据库

杂乱情感

正则表达式

中间件

[编辑]我的好友

C++GUIProgrammingwithQt4

FocusOnACE

Kevins的天空

lijiji_1515

OSX书籍(RSS)

OSX资源(RSS)

pimshell

psdk

zhaoyihui888

张硕(CathyEagle)

暗金装备

杨德龙的专栏(RSS)

王中王的Blog

王立卫

编程手札

马说

存档

2010年08月

(1)

2010年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)

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源码解析(四)剖析Qt的事件机制原理

QT源码解析(五)QLibrary跨平台调用动态库的实现

QT源码解析(六)Qt信号槽机制与事件机制的联系

QT源码解析(七)Qt创建窗体的过程

QT源码解析(八)Qt是如何处理windows消息的

QT源码解析(九)解析QDateTime

1)win下动态库调用有关的函数包括:

(1)LoadLibrary,装载动态库。

(2)GetProcAddress,获取要引入的函数,将符号名或标识号转换为DLL内部地址。

(3)FreeLibrary,释放动态链接库。

2)unix上与动态库调用有关的函数包括:

(1)_打开动态链接库:

dlopen,函数原型void*dlopen(constchar*filename,intflag);

dlopen用于打开指定名字(filename)的动态链接库,并返回操作句柄。

(2)取函数执行地址:

dlsym,函数原型为:

void*dlsym(void*handle,char*symbol);

dlsym根据动态链接库操作句柄(handle)与符号(symbol),返回符号对应的函数的执行代码地址。

(3)关闭动态链接库:

dlclose,函数原型为:

intdlclose(void*handle);

dlclose用于关闭指定句柄的动态链接库,只有当此动态链接库的使用计数为0时,才会真正被系统卸载。

(4)动态库错误函数:

dlerror,函数原型为:

constchar*dlerror(void);当动态链接库操作函数执行失败时,dlerror可以返回出错信息,返回值为NULL时表示操作函数执行成功。

我们来分析下Qt的源代码,看看Qt是如何封装这两种不同的调用动态库的方法。

下面是我用vc编写的一个动态库中的函数add:

extern"C"__declspec(dllexport)int__stdcalladd(inta,intb)

{

returna+b;

}

下面我就用QLibrary来调用一下:

QLibrarylib("QtDllTest.dll");

if(lib.load())

{

typedefint(*AddFunction)(inta,intb);

AddFunctionAdd=(AddFunction)lib.resolve("add");

if(!

Add)

{

cout<<"failed"<

}

else

{

intm;

m=Add(1,1);//来个计算1+1

cout<<"result:

"<

}

lib.unload();

}

else

{

cout<<"failed"<

}

首先将目录切换到QTDIR\src\corelib\plugin,这里面就是QLibrary实现的源代码,打开qlibrary_p.h(熟悉了Qt的常用手法,就知道,这就是QLibrary内部实现的代码),可以看到

boolload_sys();

boolunload_sys();

void*resolve_sys(constchar*);

三个函数。

在qlibrary.cpp中可以找到调用这三个函数的地方

boolQLibrary:

:

load()调用了load_sys;

boolQLibrary:

:

unload()调用了unload_sys;

void*QLibrary:

:

resolve(constchar*symbol)调用了resolve_sys

但是并没有找到这三个函数的实现,这是这么回事呢?

打开QTDIR\src\corelib\plugin\plugin.pri文件,

win32{

SOURCES+=plugin/qlibrary_win.cpp

}

unix{

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_load,dlclose对应shl_unload,dlsym对应shl_findsym。

原来QLibrary就是这样实现不同平台动态库的调用。

发表于@2010年01月04日 11:

27:

00|评论

(2)|编辑|举报|收藏

旧一篇:

QT源码解析(四)剖析Qt的事件机制原理|新一篇:

QT源码解析文章索引

-

查看最新精华文章请访问博客首页相关文章

Linux系统共享库编程Linux中动态链接库总结JNI的用法linux动态加载动态链接库dlopenAPI利用LD_PRELOAD给glibc库函数加钩子C标准库函数源代码的实现和分析androidJNI学习笔记1raoyou发表于2010年1月5日10:

41:

50IP:

举报回复删除

mm304321141发表于2010年11月12日14:

33:

13IP:

125.34.47.*举报回复删除

QLibrarylib("QtDllTest.dll");这里不应该有扩展名,Qt会自动处理,毕竟Win和unix下动态库扩展名是不同的。

发表评论表情:

评论内容:

用户名:

登录注册匿名评论匿名用户验证码:

重新获得验证码

热门招聘职位【诺姆四达EHR】高薪诚聘软件系统工程师、JAVA工程师、数据库工程师、测试工程师【E人E本】热招各类开发人才(Android、java、PHP),更多职位,点击进入【中国知网】高薪诚聘精英技术人才【广东美成达】移民公司诚聘ASP.net程序员【热聘】搜狐畅游全国热招开发工程师【《七雄争霸》研发商:

北京游戏谷】诚聘JAVA、C++技术专家及各类游戏精英【华北计算技术研究所】急聘Java开发、系统架构、需求分析【西安瑞祺科技】诚聘JAVA软件工程师【雅邦网络】诚聘网站项目经理、JAVA技术总监、JAVA开发、网站测试工程师【科锐】诚招IT中高级人才,抢工作机会,赢IPAD啦!

【imo】-国际风投+福利租房+奖金+期权+不加班+调休,邀你共创互联网的奇迹【YOHO!

新力传媒】高薪诚聘各类网站人才北京+南京【诺姆四达EHR】高薪诚聘软件系统工程师、JAVA工程师、数据库工程师、测试工程师【E人E本】热招各类开发人才(Android、java、PHP),更多职位,点击进入【中国知网】高薪诚聘精英技术人才【广东美成达】移民公司诚聘ASP.net程序员【热聘】搜狐畅游全国热招开发工程师【《七雄争霸》研发商:

北京游戏谷】诚聘JAVA、C++技术专家及各类游戏精英【华北计算技术研究所】急聘Java开发、系统架构、需求分析【西安瑞祺科技】诚聘JAVA软件工程师【雅邦网络】诚聘网站项目经理、JAVA技术总监、JAVA开发、网站测试工程师【科锐】诚招IT中高级人才,抢工作机会,赢IPAD啦!

【imo】-国际风投+福利租房+奖金+期权+不加班+调休,邀你共创互联网的奇迹【YOHO!

新力传媒】高薪诚聘各类网站人才北京+南京公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告

北京创新乐知信息技术有限公司版权所有,京ICP证070598号

世纪乐知(北京)网络技术有限公司提供技术支持

江苏乐知网络技术有限公司提供商务支持

Email:

webmaster@

Copyright©1999-2010,CSDN.NET,AllRightsReserved

近期热点文章推荐1、我的丈夫是个程序员2、使用移动网络的十大真相3、一个简单的C#多线程间同步例子4、2010年五大浮夸科技产品5、如果让马云演《终结者5》,会是什么样?

6、Apple固步自封,还是老谋深算?

7、多样的需求,多样的IT8、移动应用开发者调查报告热聘搜狐畅游全国热招开发工程师

本文来自CSDN博客,转载请标明出处:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1