动态库与静态库
1.引用静态库
1.包含头文件
注意: 如果.h文件不在当前工程目录下,则需要指定.h文件路径.
两种方法
方法A
a.右键项目->属性->C/C++->常规->附加包含目录->编辑->添加文件夹路径(精确到最后一级目录)
b.#include “xxx.h”
方法B
a.#include “文件路径名/xxx.h”
2.添加依赖项 , 指定使用哪个 .lib
STEP1
属性->链接器->常规->附加库目录 将.lib文件路径编辑到其中
STEP2
两种方法
方法A
1.#pragma comment(lib,“testlib.lib”)
方法B
1.属性->链接器->输入->附加依赖项
#include <stdio.h>
#include "../testlib/testlib.h"
#pragma comment(lib,"testlib.lib") //注意,在属性设置中仅添加了附加库目录,这里需要指定附加库文件名
2.制作动态库
- 新建空dll项目
- testdll.h头文件编写
#ifndef _TESTDLL_H_
#define _TESTDLL_H_
__declspec(dllexport) //特别声明(以dll方式导出)
int Add_Num(int a,int b);
#endif
- testdll.c编写
#include "testdll.h"
int Add_Num(int a,int b)
{
return a+b;
}
- 重新生成
- 用
dependency软件查看dll文件 是否有接口
3.使用动态库
- 包含头文件 又叫
导入头文件- 注意,被导入的头文件中,函数声明前要加__declspec(dllimport)
- 而我们想直接使用dll头文件
- 因此在编辑头文件时,应该加上条件编译
- 动态库头文件代码可以改为:
- 在动态项目中
属性->C/C++->预处理器->预处理器定义->添加_DLLAPI
- 注意,被导入的头文件中,函数声明前要加__declspec(dllimport)
#ifndef _TESTDLL_H_
#define _TESTDLL_H_
#ifdef _DLLAPI
#define DLLAPI __declspec(dllexport)
#else
#define DLLAPI __declspec(dllimport)
#endif
//__declspec(dllexport) //特别声明(以dll方式导出)
int DLLAPI Add_Num(int a,int b);
#endif
a)隐式调用法
-
属性->链接器->附加库目录增加库目录 -
添加 附加依赖项
两种方法
-
添加
#pragma comment(lib,"testdll.lib")//这不是静态库,是导入库 -
属性->链接器->输入->附加依赖项
b)动态调用法
-
添加头文件
<windows.h> -
添加调用代码 :
HMODULE hDLL = LoadLibrary(L"../testdll/Release/testdll.dll"); -
给动态库中的某函数定义别名 :
typedef int (*PADD) (int a,int b); -
添加获得函数指针代码 :
PADD pADD = (PADD)GetProcAddress(hDLL,"Add_Num");//寻找函数名为Add_Num的函数,并将其指针赋值给pADD 注意函数名不一定为自己所写,可以使用dependency查看函数名; -
直接使用函数指针
pADD(10,20); -
使用完后,使用
FreeLibrary(hDLL);释放动态库中函数;

4871

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



