使用QLibrary加载动态库

本文介绍了如何在Qt中使用QLibrary动态加载和使用动态链接库(dll)。QLibrary允许在运行时加载库,搜索机制适应不同平台。关键函数包括load()、isLoaded()和resolve()。示例代码展示了如何解析库中的函数并调用。通过创建和使用DLL,文章演示了QLibrary的实际应用。
摘要由CSDN通过智能技术生成

    使用QLibrary可以在程序运行时加载动态链接库。一个QLibrary的实例作用于一个单一的共享库上。QLibrary提供了一种平台无关的方式访问库中的函数。可以在构建QLibrary的实例时将要加载的库文件传入,也可以在创建实例后使用setFileName()显式的设置要加载的文件名。当加载库文件时,QLibrary会搜索所有平台特定的库位置,除非传入的文件名具有绝对路径。

    如果传入的文件名具有绝对路径,那么会首先尝试加载该目录。如果该文件找不到,QLibrary会使用不同的平台特定的文件前缀或后缀再次尝试,比如Unix和Mac平台的"lib"前缀,Unix平台的".so"后缀,Mac平台的".dylib",Windows平台的".dll"。如果文件名不是绝对路径,QLibrary会修改搜索顺序,首先尝试系统特定的前缀和后缀,紧接着是指定的文件路径。

    所以,基于QLibrary对库文件的搜索机制,我们推荐在传入库文件时只传入该库文件的基名,不写前缀或后缀。这样一来,同一份代码可以在不同的操作系统上工作,并且该机制会保证进行最小次数的搜索。

    该类中最重要的函数是load(),该函数动态的加载库文件,isLoaded()可以用来检查库文件是否成功加载,而resolve()函数则用来解析库中的符号地址,主要是函数地址。并且,resolve()函数在库文件未被加载时会隐式的尝试加载它。多个QLibrary实例可以可以访问同一个库文件。因为,库文件一旦被加载,就会驻留在内存中直到应用程序终止。当然,我们可以使用unload()函数来尝试卸载一个库文件,但是如果有其他的QLibrary实例正在引用同一个库文件,unload()会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值