动态库与静态库调用方法

21 篇文章 0 订阅
8 篇文章 0 订阅

动态库与静态库

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.制作动态库
  1. 新建空dll项目
  2. testdll.h头文件编写
#ifndef _TESTDLL_H_
#define _TESTDLL_H_
__declspec(dllexport)		//特别声明(以dll方式导出)
int Add_Num(int a,int b);
#endif
  1. testdll.c编写
#include "testdll.h"
int Add_Num(int a,int b)
{
    return a+b;
}
  1. 重新生成
  2. dependency软件查看dll文件 是否有接口
3.使用动态库
  1. 包含头文件 又叫导入头文件
    • 注意,被导入的头文件中,函数声明前要加__declspec(dllimport)
      • 而我们想直接使用dll头文件
      • 因此在编辑头文件时,应该加上条件编译
      • 动态库头文件代码可以改为:
      • 在动态项目中 属性->C/C++->预处理器->预处理器定义->添加_DLLAPI
#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)隐式调用法
  1. 属性->链接器->附加库目录 增加库目录

  2. 添加 附加依赖项

    两种方法

  3. 添加#pragma comment(lib,"testdll.lib") //这不是静态库,是导入库

  4. 属性->链接器->输入->附加依赖项

b)动态调用法
  1. 添加头文件<windows.h>

  2. 添加调用代码 : HMODULE hDLL = LoadLibrary(L"../testdll/Release/testdll.dll");

  3. 给动态库中的某函数定义别名 : typedef int (*PADD) (int a,int b);

  4. 添加获得函数指针代码 : PADD pADD = (PADD)GetProcAddress(hDLL,"Add_Num"); //寻找函数名为Add_Num的函数,并将其指针赋值给pADD 注意函数名不一定为自己所写,可以使用dependency查看函数名;

  5. 直接使用函数指针pADD(10,20);

  6. 使用完后,使用FreeLibrary(hDLL);释放动态库中函数;

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值