VS2019 C++动态链接库的创建使用(1)

摘要:
VS2019C++动态链接库的创建使用-创建使用dll静态库:函数和数据被编译进一个二进制文件,通常扩展名为.lib,在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块组合起来创建最终的可执行文件。动态库:往往提供2个文件,一个是引入库和一个DLL,引入库包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。
VS2019 C++动态链接库的创建使用(1) - 创建使用dll

静态库:函数和数据被编译进一个二进制文件,通常扩展名为.lib,在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块组合起来创建最终的可执行文件。

动态库:往往提供2个文件,一个是引入库和一个DLL,引入库包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。在编译链接可执行文件时,只需要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在运行的时候,再去加载DLL,访问DLL中导出的函数。

使用DLL的好处:1.可以采用多种编程语言来编写;2.增强产品的功能;3.提供二次开发的平台;4.简化项目管理,同时进行开发;5.可以节省磁盘空间和内存,多个程序使用同一种资源;6.有助于资源的共享;7.有助于实现应用程序的本地化。

动态链接库的加载两种方式:

隐式链接:

①新建DLL的程序,在里面新建加法和减法两个函数;

VS2019 C++动态链接库的创建使用(1)第1张

编译后打开工程下的DEBUG文件夹,可以看到生成的dll文件;

VS2019 C++动态链接库的创建使用(1)第2张

打开Cmd命令床开,切换到此路径下(复制文件路径,在命令窗口里右键即粘贴),输入dumpbin -exports Dll1.dll,可以看到该DLL导出的信息,如果dumpbin命令不识别,需要添加环境变量(我的安装路径是:C:Program Files (x86)Microsoft Visual Studio2019ProfessionalVCToolsMSVC14.23.28105inHostx64x64)

VS2019 C++动态链接库的创建使用(1)第3张

我们重新回到代码中,在每个函数名前增加_declspec(dllexport),再重新编译生成,发现生成的文件中多了一个Dll1.lib文件,这就是前面说的引入库文件;

VS2019 C++动态链接库的创建使用(1)第4张

接着再重新运行cmd命令,可以看到我们导出的函数信息,因为c++具有重载功能,所以函数命名会按编译器内部标识的一堆符号显示。

VS2019 C++动态链接库的创建使用(1)第5张

测试一下结果:重新新建C++控制台程序,调用Add和Sub函数,在属性里附加库依赖项加入Dll1.lib,并把文件(Dll1.lib和Dll1.dll)复制到该目录下;

红色圈起来的是表明函数在外部定义,第一种效率比下面的高。

VS2019 C++动态链接库的创建使用(1)第6张

同样可以使用dumpbin查看测试程序的输入文件信息

VS2019 C++动态链接库的创建使用(1)第7张

免责声明:文章转载自《VS2019 C++动态链接库的创建使用(1)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇nginx配置时server_name配的不一样还能正常访问VC++ 6.0 中使用 MSComm.ocx下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Visual C# 制作DLL文件

一、制作.dll1.首先创建一个新类库工程文件  文件->新建->项目->Visual C#->类库。填入工程文件名称,并且选择文件要存放的目录。 2.工程文件 将Class1.cs改名自己要创建的文件名:Operate.cs,并填入代码。 3.生成DLL文件 生成->生成myDll.dll,最后会在工程文件的bindebug...

C++ string 内存管理

String 是STL里面的类似一个字符串容器。 String对象调用append(),不能之家已有的字符串加大,因为相邻的内存可能被占用,因此需要分配一个新的内存块,将原来的内存赋值到新的内存块中。这样会降低效率。 所以c++实现分配了一个比实际字符串大的内存块,如果字符串不断增大,超过了内存块大小,程序将分配一个大小为原理两倍的新内存卡,以提高足够的空...

DLL劫持 LPK.dll

/ 上次写了USP10的,这次把LPK的代码贴出来. //以下文件在 lpk.cpp 中,头文件和上次USP10的相同 // lpk.cpp : Defines the entry point for the DLL application. // //////////////////////////////////////////////////////...

看我如何用微信上线CobaltStrike

前言   DLL劫持漏洞是老生常谈的一个漏洞,已经被前辈们各种奇技淫巧玩烂。但DLL劫持技术在后渗透和域渗透中的权限提升和权限维持都起到了至关重要的作用。本文简单剖析DLL劫持技术并通过实例应用来查看如何在渗透工作中利用此项技术。篇幅稍长,各位读者耐心观看,文中有不妥之处请各位加以斧正。 DLL劫持原理 什么是DLL?   DLL是动态链接库文件,在Win...

.Net程序集强签名详解

强签名: 1. 可以将强签名的dll注册到GAC,不同的应用程序可以共享同一dll。 2. 强签名的库,或者应用程序只能引用强签名的dll,不能引用未强签名的dll,但是未强签名的dll可以引用强签名的dll。 3. 强签名无法保护源代码,强签名的dll是可以被反编译的。 4. 强签名的dll可以防止第三方恶意篡改。 强签名的方法: 1. 有源代码: 1....

动态链接库(DLL)

动态链接库和静态链接库: 动态链接库一般不能直接执行,而且它们一般也不接收消息。 它们是包含许多函数的独立文件,这些函数可以被应用程序和其他 DLL 调用以完成某些特定的工作。 一个动态链接库只有在另外一个模块调用其所包含的函数时才被启动。 “静态链接” 一般是在程序开发过程中发生的,用于把一些文件链接在一起创建一个 Windows 可执行文件。 这些文件...