How to Create DLL(Dynamic link library)
该文章属于在YouTube视频上看到的,链接如下:
https://www.youtube.com/watch?v=EmDJsl7C9-k&t=3s
1.创建一个工程并建立一个控制台程序

2.Solution-->右键新建dll工程

3.Solution-->右键属性,选择依赖项,确定

4.CppClient-->右键设置属性$(SolutionDir)myLib\,inherit打勾,确定

5.VC++Directories-->Library Directories-->$(SolutionDir)$(IntDir)

6.myLib-->右键设置属性-->Command Line-->/DDLL_BUILD

7.myLib添加一个类,再添加一个头文件myLib.h

8.代码如下:
1 #pragma once
2
3 #ifndef EXT_MYLIB
4
5 #ifdef DLL_BUILD
6 #define EXT_MYLIB __declspec(dllexport)
7 #else
8 #pragma comment(lib, "myLib.lib")
9 #define EXT_MYLIB __declspec(dllimport)
10 #endif
11
12 #endif
13
14
15 extern int EXT_MYLIB max_size;
16 extern int EXT_MYLIB sum(int a, int b);
myLib.h
1 // myLib.cpp : Defines the exported functions for the DLL application.
2 //
3
4 #include "stdafx.h"
5 #include "myLib.h"
6
7 int EXT_MYLIB max_size = 100;
8
9 int EXT_MYLIB sum(int a, int b)
10 {
11 int s = 0;
12 for (int i = 0; i <= b; ++i)
13 s += i;;
14 return s;
15 }
myLib.cpp
1 #pragma once
2
3 #include "myLib.h"
4
5 #include <iostream>
6
7 #include <sstream>
8
9
10 class EXT_MYLIB Vctr
11 {
12
13 private:
14
15 double m_x, m_y, m_z;
16
17 public:
18 Vctr();
19
20 Vctr(double i, double j, double k);
21
22 ~Vctr();
23
24 int Total(int a, int b);
25
26
27 std::string to_string() const
28 {
29 std::ostringstream os;
30 os << "(" << m_x << "," << m_y << "," << m_z << ")";
31
32 return os.str();
33 }
34 friend EXT_MYLIB std::ostream &operator<<(std::ostream &os, const Vctr &v);
35 friend void EXT_MYLIB TestFriend(const Vctr &v);//the usage of friend fucntion
36 };
Vctr.h
1 #include "stdafx.h"
2 #include "Vctr.h"
3
4
5 EXT_MYLIB Vctr::Vctr()
6 {
7 }
8
9
10 EXT_MYLIB Vctr::~Vctr()
11 {
12 }
13
14
15
16 EXT_MYLIB Vctr::Vctr(double x, double y, double z): m_x(x) , m_y(y), m_z(z)
17 {
18
19 }
20
21
22 EXT_MYLIB std::ostream& operator<<(std::ostream& os, const Vctr& v)
23 {
24 os << v.to_string();
25
26 return os;
27 }
28
29 EXT_MYLIB void TestFriend(const Vctr& v)
30 {
31 std::cout << "hello, this is a friend function!" << std::endl;
32 std::cout << "m_x :" << v.m_x << std::endl;
33 }
34
35 EXT_MYLIB int Vctr::Total(int a, int b)
36 {
37 return (a+b);
38 }
Vctr.cpp
1 #include "pch.h"
2
3 #include <iostream>
4
5 #include "myLib.h"
6
7 #include "Vctr.h"
8
9 int main()
10 {
11 Vctr v(2, 3, 4);
12 std::cout << v << std::endl;
13 std::cout << "sum is: " << sum(2, 3) << std::endl;
14 TestFriend(v);
15 std::cout << "max_size is: " << max_size << std::endl;
16 }
CppClient.cpp
总结:
1.该视频主要讲解了变量/函数/类如何打包成dll,发现宏("macro")的位置放置并没有严格限制,例如在myLib.h,对函数的声明我们可以这样:extern int EXT_MYLIB sum(int a, int b)或者
extern EXT_MYLIB int sum(int a, int b);
2.对于函数("function")而言,关键字extern可以去掉("variable"去掉extern会报错);
3.EXT_MYLIB放置于函数返回类型前可能会报warning[browsing operations around this macro may fail,consider adding it to hint file],但这看似并不影响dll的编译以及被调用。
4.类的成员函数(包括静态函数)定义时候可以不加EXT_MYLIB,这样类的实例化对象(类名可以直接访问类的公有静态函数)依旧可以正常引用成员函数(猜测可能是定义类时候已经加入EXT_MYLIB);
How to Create DLL(Dynamic link library)的更多相关文章
- [DLL] Dynamic link library (dll) 的编写和使用教程
前一阵子,项目里需要导出一个DLL,但是导出之后输出一直不怎么对,改了半天才算改对...读了一些DLL教程,感觉之后要把现在的代码导出,应该还要花不少功夫...下面教程参照我读的3个教程写成,所以内容 ...
- Walkthrough: Creating and Using a Dynamic Link Library (C++)
Original Link: http://msdn.microsoft.com/zh-cn/library/ms235636.aspx Following content is only used ...
- DYNAMIC LINK LIBRARY - DLL
https://www.tenouk.com/ModuleBB.html MODULE BB DYNAMIC LINK LIBRARY - DLL Part 1: STORY What do we h ...
- Walkthrough: Create and use your own Dynamic Link Library (C++)
参考网站:https://docs.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-dynamic-link-librar ...
- How to Use the Dynamic Link Library in C++ Linux (C++调用Delphi写的.so文件)
The Dynamic Link Library (DLL) is stored separately from the target application and shared among dif ...
- Custom Action : dynamic link library
工具:VS2010, Installshield 2008 实现功能: 创建一个C++ win32 DLL的工程,MSI 工程需要调用这个DLL,并将Basic MSI工程中的两个参数,传递给DLL, ...
- 动态链接库(Dynamic Link Library)
DLL INTRODUCTION A DLL is a library that contains code and data that can be used by more than one pr ...
- 动态链接库(Dynamic Link Library)学习笔记(附PE文件分析)
转载:http://www.cnblogs.com/yxin1322/archive/2008/03/08/donamiclinklibrary.html 作者:EricYou 转载请注明出处 注 ...
- Linux Dynamic Shared Library && LD Linker
目录 . 动态链接的意义 . 地址无关代码: PIC . 延迟版定(PLT Procedure Linkage Table) . 动态链接相关结构 . 动态链接的步骤和实现 . Linux动态链接器实 ...
随机推荐
- odoo14 入门解刨关联字段
Odoo中关联字段是用来绑定表与表之间主从关系的. 主从关系指: 首先必须要明白id的存在的意义,它具备"唯一"的属性,也就是表中所有记录中该字段的值不会重复. 假设表A存储是身份 ...
- mysql-shell for GreatSQL 8.0.27编译安装及使用
目录 0. 前言 1. 修改说明 2. 编译mysql-shell 2.1 环境准备 2.2 开始编译mysql & mysql-shell 2.3 利用patchelf修改mysqlsh二进 ...
- 过年好,新一代大数据任务调度系统 - Apache DolphinScheduler 1.3.5 发布
节后上班第一天,新一代大数据任务调度 - Apache DolphinScheduler(incubator) 就迎来了好消息 - 在社区 20 多位小伙伴的贡献与努力下,社区发布了 1.3.5 版本 ...
- MySQL8.0解决“MySQL 服务无法启动。 服务没有报告任何错误。”
TL;NRs 初始化服务时最好使用mysqld --initialized --console命令: MySQL8.0的配置变量与MySQL5.7不同,[mysqld]下面设置字符集的变量名为char ...
- Linux安装JDK并配置环境变量
Linux - 安装jdk并配置环境变量 1. 前往JDK官网, 地址:https://www.oracle.com/java/technologies/downloads/ 复制下载链接 2. ...
- virtio 驱动的数据结构理解
ps:本文基于4.19.204内核 Q:vqueue的结构成员解释: A:结构如下,解析附后: struct virtqueue { struct list_head list;//caq:一个vir ...
- 多种方法在Markdown加入上划线、中划线、下划线
上划线和下划线不是Markdown自身语法,因此需要一点摸索,特将结果记录于此 1.中划线 中划线是markdown自身语法,实现起来很简单: ~~中划线~~ 实现的效果如下: 中划线 2.下划线 2 ...
- 【c语言学习】1 基础环境安装调试
1-1下载 vs2019 vs2019下载链接https://visualstudio.microsoft.com/zh-hans/vs/community/ 1-2安装配置环境 记得勾选上c++开发 ...
- 通过宏封装实现std::format编译期检查参数数量是否一致
背景 std::format在传参数量少于格式串所需参数数量时,会抛出异常.而在大部分的应用场景下,参数数量不一致提供编译报错更加合适,可以促进我们更早发现问题并进行改正. 最终效果 // 测试输出接 ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(17)-Fiddler如何充当第三者,再识AutoResponder标签-下篇
1.简介 上一篇宏哥主要讲解的一些在电脑端的操作和应用,今天宏哥讲解和分享一下,在移动端的操作和应用.其实移动端和PC端都是一样的操作,按照宏哥前边抓取移动端包设置好,就可以开始实战了. 2.界面功能 ...