C++ --- Dll文件的生成与调用(一)

简介: C++ --- Dll文件的生成与调用(一)

1、动态库dll概念

动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。这些库函数的扩展名是 ”.dll"、".ocx"(包含ActiveX控制的库)或者 “.drv”(旧式的系统驱动程序)。

2、使用VS生成dll文件

(1)vs 那么可以直接创建c++空项目,然后修改一下项目属性,然后在制作无疑是最好的方式。

(2)添加一个 预处理定义

注意:没有编译项目,可以会出现vs2017配置属性里面没有c/c++

大概是是VS的一个BUG,在VS2005、VS2008、VS2015(其他版本未测试,不知有没有)新建项目勾选空项目时会出现。

解决方法: 写一些代码之后再编译,C/C++就会在配置属性里出现了。(这大概就是不勾选空项目不会出现这种情况的原因了)

(3)创建DemoDll.c和DemoDll.h文件

DemoDll.c文件

1. #include "demo.h"
2. 
3. int DemoDll_API add(int a, int b)
4. {
5.  return  a + b;
6. }
7.

DemoDll.h文件

1. #pragma once
2. 
3. #pragma once
4. #ifdef DemoDll
5. #define DemoDll_API __declspec(dllexport)      // 导出
6. #else
7. #define DemoDll_API __declspec(dllimport)      // 导入
8. #endif // DemoDll
9. 
10. /*
11. \ brief
12. __cplusplus  c++宏
13. */
14. #ifdef __cplusplus
15. extern "C" {
16. #endif // __cplusplus
17. 
18.   /*
19.   \ brief  在这里编写 函数模块
20.   */
21.   int DemoDll_API add(int a, int b);
22. 
23. 
24. #ifdef __cplusplus
25. }
26. #endif // __cplusplus
27.

(3)在VS中编译源文件,可以在DEBUG目录中看到生成的.dll文件和.lib文件

3、新建一个项目,使用dll文件

(1)将DemoDll.h、DemoDll.lib和DemoDll.dll拷贝到项目下

(2)将DemoDll.h和DemoDll.lib文件添加到项目中

接下来我们查看下 头文件,就可以理解之前编写动态库 添加预处理的宏的好处。

(3)

创建main.cpp进行测试(使用DemoDll.dll)

1. #include<iostream>
2. #include"demo.h"
3. 
4. using namespace std;
5. 
6. int main(int argc, char* argv[])
7. {
8.  cout << " 80 + 6 = " << add(80, 6) << endl;
9. }

可以看到运行结果

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

创建main.cpp进行测试(使用DemoDll.lib)

1. #include<iostream>
2. #include"demo.h"
3. 
4. using namespace std;
5. 
6. #pragma comment(lib, "DemoDll.lib")
7. 
8. int main(int argc, char* argv[])
9. {
10.   cout << " 80 + 6 = " << add(80, 6) << endl;
11. }
相关文章
|
3月前
|
存储 分布式数据库 API
技术好文:VisualC++查看文件被哪个进程占用
技术好文:VisualC++查看文件被哪个进程占用
|
4天前
|
JavaScript 前端开发 测试技术
一个google Test文件C++语言案例
这篇文章我们来介绍一下真正的C++语言如何用GTest来实现单元测试。
8 0
|
1月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
|
1月前
|
存储 数据挖掘 C语言
【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】
【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】
|
22天前
|
存储 C++
C++ dll 传 string 类 问题
C++ dll 传 string 类 问题
16 0
|
27天前
|
监控 编译器 C++
【代码讲解】【C/C++】获取文件最后修改的时间(系统时间)
【代码讲解】【C/C++】获取文件最后修改的时间(系统时间)
31 0
|
1月前
|
安全 C++ Windows
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
|
1月前
|
C++
C++通过文件指针获取文件大小
C++通过文件指针获取文件大小
24 0
|
3月前
|
C++
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
|
3月前
|
C++ iOS开发 开发者
C++一分钟之-文件输入输出(I/O)操作
【6月更文挑战第24天】C++的文件I/O涉及`ifstream`, `ofstream`和`fstream`类,用于读写操作。常见问题包括未检查文件打开状态、忘记关闭文件、写入模式覆盖文件及字符编码不匹配。避免这些问题的方法有:检查`is_open()`、显式关闭文件或使用RAII、选择适当打开模式(如追加`ios::app`)以及处理字符编码。示例代码展示了读文件和追加写入文件的实践。理解这些要点能帮助编写更健壮的代码。
45 2