20220523,模板
This commit is contained in:
@@ -25,7 +25,7 @@ password:
|
||||
|
||||
## DLL概述
|
||||
|
||||
概述内容[来自博客](https://blog.csdn.net/elaine_bao/article/details/51784864?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6.pc_relevant_default&utm_relevant_index=12)
|
||||
本节内容[来自博客](https://blog.csdn.net/elaine_bao/article/details/51784864?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6.pc_relevant_default&utm_relevant_index=12)
|
||||
|
||||
它们是一些独立的文件,其中包含能被可执行程序或其他dll调用来完成某项工作的函数,只有在其他模块调用dll中的函数时,dll才发挥作用。
|
||||
|
||||
@@ -63,13 +63,13 @@ password:
|
||||
|
||||
C++库-类型选择shared
|
||||
|
||||

|
||||

|
||||
|
||||
#### 新建文件
|
||||
|
||||
右键项目,新建C/C++源文件(或者直接新建一个类),并勾选创建关联头
|
||||
|
||||

|
||||

|
||||
|
||||
#### 编写c++
|
||||
|
||||
@@ -140,7 +140,7 @@ int Student::getAge() {
|
||||
|
||||
在debug目录下生成了.dll、.lib文件,后续主要用到.dll、.lib和.h文件
|
||||
|
||||

|
||||

|
||||
|
||||
### 测试
|
||||
|
||||
@@ -170,13 +170,13 @@ dumpbin -exports Dll1.dll
|
||||
|
||||
#### 新建项目
|
||||
|
||||

|
||||

|
||||
|
||||
#### 在项目根目录新建lib文件夹
|
||||
|
||||
将上述生成的.dll .lib 和编写的.h文件复制到lib中
|
||||
|
||||

|
||||

|
||||
|
||||
#### cmakelist.txt添加:
|
||||
|
||||
@@ -203,7 +203,7 @@ target_link_libraries(${PROJECT_NAME}
|
||||
|
||||
#### 运行/调试配置:
|
||||
|
||||

|
||||

|
||||
|
||||
#### 调用
|
||||
|
||||
@@ -443,7 +443,7 @@ int main() {
|
||||
}
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@@ -516,11 +516,11 @@ int main() {
|
||||
|
||||
选择`具有导出项的DLL动态链接库`
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@@ -566,7 +566,7 @@ void hello2() {
|
||||
|
||||
在项目中定义.def 文件,该文件为模块导出文件
|
||||
|
||||

|
||||

|
||||
|
||||
编写.def
|
||||
|
||||
@@ -578,11 +578,11 @@ EXPORTS
|
||||
|
||||
如果是vs平台,需要在连接器中添加.def文件,如果是通过上述方式添加的.def,会自动添加
|
||||
|
||||

|
||||

|
||||
|
||||
然后点击 “ 生成解决方案 ” ,就可以在工程目录的 debug 目录或者 release 目录下(这取决你生成的是debug版本还是release版本)生成了动态链接库的相关文件。第三方调用时关键的文件为 **.lib文件** 和 **.dll文件** 以及工程目录下的 **.h头文件**
|
||||
|
||||

|
||||

|
||||
|
||||
### 调用
|
||||
|
||||
@@ -614,14 +614,14 @@ int main()
|
||||
}
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
##### 在解决方案管理面板中添加头文件和资源文件
|
||||
|
||||
添加一个现有项头文件,在文件夹中找到第三方库的头文件( .h ),添加进新建立的项目。
|
||||
添加一个现有项资源文件,在文件夹中找到第三方库的库文件( .lib ),添加进新建立的项目。
|
||||
|
||||

|
||||

|
||||
|
||||
```c
|
||||
#include <iostream>
|
||||
@@ -655,13 +655,13 @@ int main()
|
||||
|
||||
VS2019 自带的工具 dumpbin.exe 可以查看编译后的 动态链接库对应的 函数名。
|
||||
|
||||

|
||||

|
||||
|
||||
打开命令行,输入命令 `dumpbin -exports Dll2.dll`
|
||||
|
||||
这里采用博客中的内容:
|
||||
|
||||

|
||||

|
||||
|
||||
所以 addFunc 不能直接使用,只能用被 name Mangling 后的名字 ,这里 **addFunc** 编译后的名字是 **?addFunc@@YAHHH@Z**
|
||||
|
||||
@@ -709,12 +709,13 @@ int main()
|
||||
FreeLibrary(hModule);
|
||||
}
|
||||
```
|
||||
|
||||
##### 使用lib和dll文件
|
||||
|
||||
* 把 **CPPDLL.dll** 文件放到 debug 目录下,
|
||||
* 然后在项目中引入 **CPPDLL.lib** 文件。 **链接器** -> **输入** -> **附加依赖项** -> **编辑**
|
||||
|
||||

|
||||

|
||||
|
||||
```c
|
||||
#include <iostream>
|
||||
@@ -750,6 +751,8 @@ int main()
|
||||
|
||||
这样就不用 手动设置 添加 lib 文件了
|
||||
|
||||
|
||||
|
||||
#### 多层调用
|
||||
|
||||
只需要把多层的dll都放进去即可
|
||||
@@ -878,11 +881,11 @@ void Student2::student2Hello() {
|
||||
|
||||
### 建立netframework项目
|
||||
|
||||

|
||||

|
||||
|
||||
### 将两个dll文件放到debug目录下
|
||||
|
||||

|
||||

|
||||
|
||||
### 调用
|
||||
|
||||
@@ -929,15 +932,15 @@ namespace ConsoleApp3
|
||||
|
||||
- 新建dll项目
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
生成后的结构如下(这里用的的DllDemo1):
|
||||
|
||||

|
||||

|
||||
|
||||
其中_global.h自带两个系统默认导出宏
|
||||
|
||||
@@ -1009,27 +1012,27 @@ int myadd(int a, int b){
|
||||
|
||||
#### 新建c++控制台项目
|
||||
|
||||

|
||||

|
||||
|
||||
#### 构建项目,生成debug目录
|
||||
|
||||
#### 将dll文件放到debug目录
|
||||
|
||||

|
||||

|
||||
|
||||
#### 将lib文件放到工程目录下
|
||||
|
||||

|
||||

|
||||
|
||||
#### 右键项目,添加lib库
|
||||
|
||||

|
||||

|
||||
|
||||
**选择外部库**
|
||||
|
||||
选择刚才的lib文件,取消平台下的linux,mac,取消为debug版本添加d作为哦后缀,点击完成代码就被添加进call.pro
|
||||
|
||||

|
||||

|
||||
|
||||
#### 调用
|
||||
|
||||
@@ -1061,7 +1064,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
右键项目,添加两个.h文件
|
||||
|
||||

|
||||

|
||||
|
||||
引入头文件
|
||||
|
||||
@@ -1085,4 +1088,4 @@ int main(int argc, char *argv[])
|
||||
|
||||
return a.exec();
|
||||
}
|
||||
```
|
||||
```
|
||||
Reference in New Issue
Block a user