一、静态链接库
- 配置项目属性
(默认的配置类型:应用程序.exe)

- 编写代码,Debug模式下编译项目—生成静态链接库
静态生成的.lib既包含相关的符号链接,也包含实际代码

- 新建项目,在新项目中导入静态链接库

方法一:使用 extern在外部定义,使用#pragma comment(lib,“XXX.lib”)//将库链接
#include <iostream>
extern int add(int a, int b);//外部定义add()
#pragma comment(lib,"Project2.lib")//将库链接
int main()
{
std::cout<<add(1, 2);
return 0;
}
方法二:使用 extern在外部定义,配置项目属性-链接器-输入-XXX.lib

#include <iostream>
extern int add(int a, int b);//外部定义add()
//#pragma comment(lib,"Project2.lib")//将库链接
int main()
{
std::cout<<add(1, 2);
return 0;
}

二、动态链接库的使用
- 配置项目属性

- 生成动态链接库
extern "C" _declspec(dllexport) int add(int a, int b)//(dllexport)导出;"c"以C文件形式
{
return a + b;
}

3. 使用动态链接库
方法一:同时使用静态链接库和动态库,使用XXX.lib(动态生成的.lib只包含相关的符号链接,实际代码没有)

#include <iostream>
extern "C" _declspec(dllimport) int add(int a, int b);
#pragma comment(lib,"DynamicDll.lib")
int main()
{
return add(2, 4);
}

还需要将生成的dll文件拷贝到项目的debug目录下

方法二:不依赖静态库,直接使用动态库方法—利用Windows API

#include <iostream>
//1.将动态库加载到内存中
#include <Windows.h>
int main()
{
//2.dll当前的实例
HINSTANCE hDll = LoadLibrary("DynamicDll.dll");//参数:和项目debug同级:文件名;或者文件所在路径
if (hDll == NULL)
{
std::cout << "load dll fail";
return -1;
}
//3.创建函数指针
using functionPtr = int(*)(int, int);
//4.从加载的实例中找到add()
functionPtr addFunction = (functionPtr)GetProcAddress(hDll, "add");
if (addFunction == NULL)
{
std::cout << "cannot find target function";
return -1;
}
std::cout << addFunction(2, 4);
return 0;
}
静态与动态链接库的区别与使用方法
文章介绍了静态链接库的配置方法,包括通过extern和项目属性导入,以及动态链接库的使用,如导出和导入机制,以及不依赖静态库时通过WindowsAPI加载动态库的示例。
4301

被折叠的 条评论
为什么被折叠?



