动态链接库之静态加载

首先先解释一下什么叫动态链接库的静态加载

其实静态加载的概念很简单,其实就是调用动态链接版的静态链接库lib,但是又必须拥有.dll的动态链接库文件

动态链接库的静态加载前提:(我这里命名为DLL1)

1.工程里必须拥有动态链接库生成的.dll

2.工程里必须拥有动态链接库生成的.lib

3.工程里必须拥有关于动态链接库的.h文件(test.h是动态库里面提供的.h文件)

好了,那我们应该怎么去用静态加载呢?

很简单,有两种方法:

第一种:手动式

#pragma comment(lib, "Dll1.lib")

扫描二维码关注公众号,回复: 9155263 查看本文章

这种方式可能比较麻烦,但是代码的可移植性较好,因为用第二种方式,如果你是在网上发布源码,可能别人下载代码之后没有设置.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函数并没有记录

发布了23 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/TanJiaLiang_/article/details/86572355