lib 和 dll 的区别与使用, 没有头文件改如何使用
时间:2022-05-03
本文章向大家介绍lib 和 dll 的区别与使用, 没有头文件改如何使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.生成lib文件
首先,我们先建立一个控制台工程(新建->工程->控制台程序),添加add.cpp以及add.h文件。
//sub.h
#ifndef _SUB_H
#define _SUB_H
void sub(int a,int b);
#endif
//sub.cpp
#include "sub.h"
#include <iostream>
void sub(int a,int b)
{
std::cout<<(a-b)<<std::endl;
}
这时候再按F7,build solution即可产生lib文件。在Debug中只生成.lib文件。
2.生成dll文件
生成dll文件的过程与上面的过程是一样的,只是在选择Dynamic Library(.dll)即可。在Debug中会生成一个.lib和.dll两种文件。
3.两种文件的使用
在使用时,静态链接库只要把.h和.lib文件加入到工程文件夹中即可。而动态链接库要把.h、.lib和.dll文件加入到工程中。
#include <iostream>
#include "sub.h" //链接库的头文件
using namespaces std;
#pragma comment(lib,"sub.lib") //加入链接库
int main()
{
sub(5,4);
return 0;
}
4.仅有.dll文件时候的使用方法
在没有.h和.lib文件时,需要函数指针和WIN32 API函数LoadLibrary、GetProcAddress装载,只需要.dll文件即可(将.dll文件置入工程目录中)。
#include <iostream>
#include <windows.h> //使用函数和某些特殊变量
typedef void (*DLLFunc)(int,int); //确定调用函数的形参
int main()
{
DLLFunc dllFunc;
HINSTANCE hInstLibrary = LoadLibrary("sub.dll");//加载.dll
if (hInstLibrary == NULL)
{
FreeLibrary(hInstLibrary);
}
dllFunc = (DLLFunc)GetProcAddress(hInstLibrary, "sub");//第二个参数为要调用的函数名称
if (dllFunc == NULL)
{
FreeLibrary(hInstLibrary);
}
dllFunc(5,4);
FreeLibrary(hInstLibrary);
return(1);
}
最近一直在搞API这东西,用了curl、tinyxml和jsoncpp几种开源的库,在Linux下使用倒是很方便,在windows下还是自己编译的遇到了点问题,从新整理学习下,备用~~
- 2018,我要Axublog。
- 厚土Go学习笔记 | 16. go语言有指针 没有指针运算
- 嗤!给你来点fiyocms漏洞喷雾
- 厚土Go学习笔记 | 15. defer语句延迟函数的执行
- Nodejs学习笔记(九)--- 与Redis的交互(mranney/node_redis)入门
- Nodejs学习笔记(十)--- 与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门
- Golang泛型编程初体验
- 工具| 手把手教你制作信息收集器之端口扫描
- 厚土Go学习笔记 | 14. switch 的条件写的有点灵活,不过风格还是go的一贯风格
- Nodejs学习笔记(十四)— Mongoose介绍和入门
- 厚土Go学习笔记 | 13. 用循环和函数 实现Sqrt(x)
- 代码审计| 这是一款适合练手的漏洞
- 工具| NSE漏洞审计和渗透脚本的demo
- Windows Server 2008 R2 配置Exchange 2010邮件服务器并使用EWS发送邮件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS7下搭建并体验HFish开源蜜罐系统
- 唐朝人更懂React
- 唐朝人更懂React
- 一起学习PHP的runkit扩展如何使用
- CentOS7下部署开源网络流量回溯分析系统Moloch
- spring源码(八)
- 通过源码理解rarp协议(基于linux1.2.13)
- 详解Im2Col+Pack+Sgemm策略更好的优化卷积运算
- Kubernetes 使用 ceph-csi 消费 RBD 作为持久化存储
- 聊聊调试的那些事,超实用!!!
- [不定时一题]LeetCode无重复字符的最长子串
- 整理了小程序云开发实战,你看懂了吗?
- Reactive-MongoDB异步Java Driver解读
- 解密Go协程的栈内存管理
- 深入浅出mongodb之实战