首先先解释一下什么叫动态链接库的静态加载
其实静态加载的概念很简单,其实就是调用动态链接版的静态链接库lib,但是又必须拥有.dll的动态链接库文件
动态链接库的静态加载前提:(我这里命名为DLL1)
1.工程里必须拥有动态链接库生成的.dll
2.工程里必须拥有动态链接库生成的.lib
3.工程里必须拥有关于动态链接库的.h文件(test.h是动态库里面提供的.h文件)
好了,那我们应该怎么去用静态加载呢?
很简单,有两种方法:
第一种:手动式
#pragma comment(lib, "Dll1.lib")
这种方式可能比较麻烦,但是代码的可移植性较好,因为用第二种方式,如果你是在网上发布源码,可能别人下载代码之后没有设置.lib的路径就会编译出错
第二种:在编译器中去设置(这里我用的是VS2017)
项目右键找到属性 --> 链接器 --> 常规 --> 附加目录库:.\(因为我的.dll和.lib就放在本地目录下,如果你的在别的目录,就设置这里的路径)
并且在
链接器 --> 输入 --> 附加依赖项添加:DLL1.lib;(注意,我的lib是DLL1,而且是添加我们的.lib)
实例:这里我采取第一种方法,比较容易观察
首先我们先查看test.h头文件的内容
可能你会很奇怪__declspec(dllexport)这是什么,这个先放一放,待会儿会解释清楚,你先知道这个是导出到我们的.dll文件列表里,而Max函数是区别Add和Sub函数的
我们再看main.cpp头文件
这里是我们的主程序调用
结果:
这是因为我们没有向外__declspec(dllexport)造成的,在这里我推荐一款查看.dll文件内容的软件Dependency Walker
我们可以看到只有Add函数和Sub在.dll里面有记录,Max函数并没有记录