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动态链接器实 ...
随机推荐
- NOIP提高组模拟赛26
A. LCIS 蓝书原题,CF10D 弱化版 首先直接把 LIS 和 LCS 合起来设计一个 DP . 设 \(dp_{i,j}\) 表示 \(A_{1\dots i}\) 和 \(B_{1\dots ...
- Vue 内置指令 && 自定义指令
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8" /> 5 & ...
- Vue 基本列表 && 数据过滤与排序
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8" /> 5 & ...
- 分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享
随着微服务架构的流行,客户端发起的一次请求可能需要涉及到多个或 N 个服务,致使我们对服务之间的监控和排查变得更加复杂. 举个例子: 某条业务线的某个接口调用服务端时快时慢,这时就需要排查各个服务的日 ...
- DP选讲
$DP$选讲直接上题吧放个题单[各省省选DP](https://www.luogu.com.cn/training/151079)$P5322[BJOI2019]$排兵布阵一眼题,考虑$dp[i][j ...
- MySQL主从复制之并行复制说明
传统单线程复制说明 众所周知,MySQL在5.6版本之前,主从复制的从节点上有两个线程,分别是I/O线程和SQL线程. I/O线程负责接收二进制日志的Event写入Relay Log. SQL线程读取 ...
- 新一代工作流调度-Apache DolphinScheduler 1.3.5 Docker镜像发布
新一代大数据工作流调度 - Apache DolphinScheduler(incubator) 今天发布了 1.3.5 官方 Docker 镜像.在社区伙伴 chengshiwen 的努力下, 1 ...
- LuoguP4782 【模板】2-SAT 问题 (2-SAT)
Not difficult, the only problem is how to deal with give 0/1 to the var. Tarjan offers the reverse t ...
- DOM及DOM相关操作
DOM 概述: DOM 全称(document object model)文档对象模型(文档指定为对应html文档),对应的DOM就是操作HTML文档的(增删改查) DOM结构 document 文档 ...
- PowerPoint 常识备忘录
一句科普 插入超链接时所链接的目标不能是幻灯片中的某个对象.可以给文本.图形等对象添加超链接,链接的对象可以是文件或网页,不能是幻灯片中的某个对象. 名词解释 视图 视图指的是显示幻灯片的方式.视图的 ...