源码解析6-系统封装-QLibrary源码分析

Qt源码解析 索引

调用示例

 QLibrary myLib("mylib");
  typedef void (*MyPrototype)();
  MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol");
  if (myFunction)
      myFunction();

调用堆栈

以主要的resolve为例

  1. QFunctionPointer QLibrary::resolve(const char *symbol)

  2. QFunctionPointer QLibraryPrivate::resolve(const char *symbol)

  3. QFunctionPointer QLibraryPrivate::resolve_sys(const char* symbol)

  4. 系统调用FARPROC address = GetProcAddress(pHnd, symbol);

源码路径

$(QTDIR)\qtbase\src\corelib\plugin

  1. qlibrary.cpp:QLibrary类的封装实现,以及QLibraryPrivate的部分封装实现

  2. qlibrary_p.h:QLibraryPrivate类定义与接口声明,系统相关的都声明为私有函数

    bool load_sys();//加载库
    bool unload_sys();//卸载库
    QFunctionPointer resolve_sys(const char *);//查找函数符号
  3. QLibraryPrivate的操作系统相关封装实现:

    qlibrary_win.cpp window系统实现

    qlibrary_unix.cpp 类Linux系统实现

源码编译选择

$(QTDIR)\qtbase\src\corelib\plugin\plugin.pri文件控制了编译对不同操作系统的编译选择

unix: SOURCES += plugin/qlibrary_unix.cpp
else: SOURCES += plugin/qlibrary_win.cpp

操作系统函数解析

windows平台

  1. 加载库LoadLibrary

  2. 卸载库FreeLibrary

  3. 查找函数符号GetProcAddress

类Linux平台

  1. 加载库dlopen

  2. 卸载库dlclose

  3. 查找函数符号dlsym

详细的代码里面还有更详细的区分,此处列了常用的主要的接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道格拉斯范朋克

播种花生牛奶自留田

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值