Qt学习篇(二):Qt加载动态库

      之前写到Qt的信号槽机制,这篇来记录下Qt如何加载外部动态库。

      Qt加载动态库分为显式加载与隐式加载,现在先来了解下链接库:
(1)动态链接库,通常有.h .lib .dll三个文件,功能实现在dll中(有时.lib会以***.dll.a的形式显示,两者意义相同);
(2)静态链接库,通常有.h .lib二个文件,功能实现在lib中。
      
       显式加载DLL:
  • 显式加载只需要dll文件,不需要.h和.lib,需要将DLL放到可执行文件目录中(与项目编译得到的exe文件放在一起);
  • 显式加载只需要操作**.C文件,不需要更改项目配置文件,首先是调用QLibrary,#include ;
  • QLibrary test_dll("*****.dll");//加载*****.dll
    if (test_dll.load())//判断是否加载成功
    {
    	myfun fun = (myfun)test_dll.resolve("***");//获取dll的函数,***为动态库中的函数
    	if (fun)//判断是否获取到此函数
    	{
    		//正常使用该函数
    	}
    }



       隐式加载DLL:
  • DLL隐式加载,需要.dll, .h, .lib文件;
  • 需要将dll文件放到可执行目录下,在**.pro文件中添加lib的路径,包含头文件(可使用绝对或相对路径,也可在**.pro中添加include路径,使用时直接包含头文件便可);
  • 在包含头文件时,若在C++项目中加载C语言的动态库,需使用extern包含头文件;
  • 在**.pro中添加lib路径:
  1.          在**.pro中右击编辑区域选择添加库,并选择外部库,在库文件路径中添加你的lib文件路径;
  2. Qt学习篇(二):Qt加载动态库_第1张图片
  3. 注意标注区域的选择,在添加库时会默认添加该库对应的.h文件的路径,但是我的有时.h路径添加了却在include时出现查找不到文件,所以在include时建议使用.h在项目中的相对路径;
  • INCLUDEPATH += $$PWD/X264
    
    LIBS += $$PWD/X264/libx264.lib
至此,Qt加载动态库就完成了。

你可能感兴趣的:(Qt)