VS中静态库和DLL的使用

这篇具有很好参考价值的文章主要介绍了VS中静态库和DLL的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考微软官方文档:创建和使用自己的动态链接库 (C++)
创建并使用静态库

静态库使用

创建静态库项目并添加类

1、在菜单栏上,选择“文件”>“新建”>“项目”,打开“创建新项目”对话框。

2、在对话框顶部,将“语言”设置为“C++”,将“平台”设置为“Windows”,并将“项目类型”设置为“库”。

3、从经过筛选的项目类型列表中,选择“Windows 桌面向导”,然后选择“下一步” 。

4、在“配置新项目”页面,在“项目名称”框中输入“MathLibrary”,以指定项目的名称 。 在“解决方案名称”框中输入“StaticMath” 。 选择“创建”按钮,打开“Windows 桌面项目”对话框 。

5、在“Windows 桌面项目”对话框的“应用程序类型”下,选择“静态库(.lib)” 。

6、在“其他选项”下,取消选中“预编译标头”复选框(如果已选中) 。 选中“空项目”框 。

7、选择“确定”,创建项目 。

8、右键添加头文件和源文件,在头文件中添加类的声明,在源文件中实现类的功能。

9、点击生成>生成解决方案

创建引用静态库的C++控制台应用

1、在“解决方案资源管理器”中,右键单击顶部节点“解决方案 StaticMath”,打开快捷菜单 。 选择“添加”>“新建项目”,打开“添加新项目”对话框 。

2、在对话框的顶部,将“项目类型”筛选器设置为“控制台” 。

3、从筛选的项目类型列表中,选择“控制台应用”,然后选择“下一步” 。 在下一页中,在“名称”框中输入“MathClient”,以指定项目的名称 。

4、选择“创建” 按钮创建客户端项目。

5、创建控制台应用后,将为你创建一个空程序。 源文件的名称与你之前选择的名称相同。 在此示例中,命名为 MathClient.cpp。

在应用中使用静态库功能并运行应用(重点!)

1、右键MathClient项目,选择添加>引用,在列出的可以引用的库中选择“MathLibrary”

2、右键MathClient项目,属性,将配置下拉列表设置为所有配置,将平台下拉列表设置为所有平台

3、选择“配置属性”>“C/C++”>“常规”,在附加包含目录中属性中指定“MathLibrary”目录的路径

4、在MathClient.cpp中添加 #include “MathLibrary.h”

5、若要生成可执行文件,请在菜单栏上选择“生成”>“生成解决方案” 。

6、右键单击打开“解决方案资源管理器”中“MathClient”的快捷菜单,然后选择“设置为启动项目” 。

7、“调试” >“开始执行(不调试)”


动态库使用

创建 DLL 时,请考虑客户端应用如何使用它。 若要调用函数或访问由 DLL 导出的数据,客户端源代码必须在编译时具有可用的声明。 在链接时间,链接器需要信息来解析函数调用或数据访问。 而 DLL 在“导入库”中提供此信息,导入库是包含有关如何查找函数和数据的信息的文件,而不是实际代码 。 而在运行时,DLL 必须可供客户端使用,位于操作系统可以找到的位置。

无论是你自己的还是来自第三方的信息,客户端应用项目都需要几条信息才能使用 DLL。 它需要查找声明 DLL 导出的标头、链接器的导入库和 DLL 本身。 一种解决方案是将所有这些文件复制到客户端项目中。 对于在客户端处于开发阶段时不太可能更改的第三方 DLL,此方法可能是使用它们的最佳方法。

但是,如果还要同时生成 DLL,最好避免重复。 如果创建了正在开发的 DLL 文件的本地副本,可能会意外更改一个副本而不是另一个中的头文件,或使用过期的库。为避免不同步的代码,建议在客户端项目中设置包含路径,使其直接包括 DLL 项目中的 DLL 头文件。 此外,在客户端项目中设置库路径以包括 DLL 项目中的 DLL 导入库最后,将生成的 DLL 从 DLL 项目复制到客户端生成输出目录中。 此步骤允许客户端应用使用生成的同一 DLL 代码。

创建DLL项目

1、在菜单栏上,选择“文件”>“新建”>“项目”,打开“创建新项目”对话框 。

2、“创建新项目”对话框的屏幕截图,其中突出显示了动态链接库模板。

3、在对话框顶部,将“语言”设置为“C++”,将“平台”设置为“Windows”,并将“项目类型”设置为“库”。

4、从经过筛选的项目类型列表中,选择“动态链接库(DLL)”,然后选择“下一步” 。

5、在“配置新项目”页面,在“项目名称”框中输入“MathLibrary”,以指定项目的名称 。 保留默认“位置”和“解决方案名称”值 。 将“解决方案”设置为“创建新解决方案” 。 如果“将解决方案和项目放在同一目录中”已选中,则取消选中 。

6、选择“创建” 按钮创建项目。

7、在项目中添加新建项,创建头文件和源文件并添加相关功能代码

8、选择“生成”>“生成解决方案” 。 DLL 和相关编译器输出放在解决方案文件夹正下方的“Debug”文件夹中 。 如果创建发布版本,该输出会放置在“Release”文件夹中 。

创建使用DLL的客户端应用

1、在菜单栏上,选择“文件”>“新建”>“项目”,打开“创建新项目”对话框。

2、在对话框顶部,将“语言”设置为“C++”,将“平台”设置为“Windows”,并将“项目类型”设置为“控制台”。

3、从筛选的项目类型列表中,选择“控制台应用”,然后选择“下一步” 。

4、在“配置新项目”页面,在“项目名称”框中输入“MathClient”,以指定项目的名称 。 保留默认“位置”和“解决方案名称”值 。 将“解决方案”设置为“创建新解决方案” 。 如果“将解决方案和项目放在同一目录中”已选中,则取消选中 。

5、“创建新项目”对话框的屏幕截图,其中突出显示了“控制台应用”选项。

6、选择“创建” 按钮创建客户端项目。

在应用中使用DLL库(重点!)

要在源代码中调用 MathLibrary 函数,项目必须包括 MathLibrary.h 文件 。 可以将此头文件复制到客户端应用项目中,然后将其作为现有项添加到项目中。 对于第三方库,此方法可能是一个不错的选择。

但是,如果同时处理 DLL 的代码和客户端的代码,为了避免头文件可能会不同步的问题,请设置项目中的“附加包含目录” 路径,使其包含指向头文件的路径。

1、右键单击“解决方案资源管理器” 中的“MathClient” 节点以打开“属性页” 对话框。

2、在“配置”下拉框中,选择“所有配置”(如果尚未选择) 。

3、在左窗格中,选择“配置属性”>“C/C++”>“常规” 。

4、在属性窗格中,选择“附加包含目录” 编辑框旁的下拉控件,然后选择“编辑” 。

5、在“附加包含目录” 对话框的顶部窗格中双击以启用编辑控件。 或者,选择文件夹图标以创建新条目。

6、在编辑控件中,指定指向 MathLibrary.h 头文件的位置的路径。 可选择省略号 (…) 控件浏览到正确的文件夹 。

还可将客户端源文件中的相对路径输入到包含 DLL 头文件的文件夹。 如果已按照指示将客户端项目置于 DLL 的单独解决方案中,则相对路径应如下所示:

…\MathLibrary\MathLibrary

如果 DLL 和客户端项目位于同一解决方案中,则相对路径可能如下所示:

…\MathLibrary

如果 DLL 和客户端项目位于其他文件夹中,请调整相对路径以进行匹配。 或者,使用省略号控件浏览文件夹。

7、在“附加包含项目”对话框中输入标头文件的路径后,选择“确定”按钮 。 在“属性页”对话框中,选择“确定”按钮以保存更改 。

此代码可进行编译,但不能链接。 如果现在生成客户端应用,则错误列表会显示几个 LNK2019 错误。 这是因为项目丢失了一些信息:你尚未指定项目在 MathLibrary.lib 库上有依赖项 。 而且,你尚未告诉链接器如何查找 MathLibrary.lib 文件

要解决此问题,可以直接将库文件复制到客户端应用项目中。 链接器将自动查找并使用它。 但是,如果库和客户端应用都处于开发过程中,则可能会导致一个副本中的更改未在另一个副本中显示。 要避免此问题,可以设置附加依赖项属性,告诉生成系统项目依赖于 MathLibrary.lib 。 此外,还可设置项目中的“附加库目录” 路径,使其在链接时包含指向原始库的路径。

1、右键单击“解决方案资源管理器”中的“MathClient”节点,然后选择“属性”以打开“属性页”对话框 。

2、在“配置”下拉框中,选择“所有配置”(如果尚未选择) 。 它可确保任何属性更改同时应用于调试和发布版本。

3、在左窗格中,选择“配置属性”>“链接器”>“输入”。 在属性窗格中,选择“附加依赖项”编辑框旁的下拉控件,然后选择“编辑” 。

4、在“附加依赖项”对话框中,将 MathLibrary.lib 添加到顶部编辑控件的列表中 。

5、选择“确定” 返回到“属性页” 对话框。

6、在左窗格中,选择**“配置属性”>“链接器”>“常规”** 。 在属性窗格中,选择“附加库目录”编辑框旁的下拉控件,然后选择“编辑” 。

7、在“附加库目录” 对话框的顶部窗格中双击以启用编辑控件。 在编辑控件中,指定指向 MathLibrary.lib 文件位置的路径。 默认情况下,它位于 DLL 解决方案文件夹下的“Debug”文件夹中 。 如果创建发布版本,该文件会放置在“Release”文件夹中 。 可以使用 $(IntDir) 宏,这样无论创建的是哪种版本,链接器都可找到 DLL。 如果已按照指示将客户端项目置于 DLL 项目的单独解决方案中,则相对路径应如下所示:

…\MathLibrary$(IntDir)

如果 DLL 和客户端项目位于其他位置,请调整相对路径以进行匹配。
VS中静态库和DLL的使用

8、在“附加库目录”对话框中输入指向库文件的路径后,选择“确定”按钮返回到“属性页”对话框 。 选择“确定”以保存属性更改 。

客户端应用现在可以成功编译和链接,但它仍未具备运行所需的全部条件。 当操作系统加载应用时,它会查找 MathLibrary DLL。 如果在某些系统目录、环境路径或本地应用目录中找不到 DLL,则加载会失败。
避免此问题的一种方法将 DLL 复制到包含客户端可执行文件的目录中,作为生成过程的一部分可将“后期生成事件”添加到项目中,以此添加一条命令,将 DLL 复制到生成输出目录 。 此处指定的命令仅在 DLL 丢失或发生更改时才复制它。 此命令使用宏根据生成配置在调试或发布位置之间进行复制。

1、右键单击“解决方案资源管理器”中的“MathClient”节点,然后选择“属性”以打开“属性页”对话框 。

2、在“配置” 下拉框中,选择“所有配置” (如果尚未选择)。

3、在左窗格中,选择“配置属性”>“生成时间”>“后期生成事件” 。

4、在属性窗格中,在“命令行”字段中选择编辑控件 。 如果已按照指示将客户端项目置于 DLL 项目的单独解决方案中,则输入以下命令:

xcopy /y /d “…\MathLibrary$(IntDir)MathLibrary.dll” “$(OutDir)”

如果 DLL 和客户端项目在其他目录中,请更改 DLL 的相对路径以进行匹配。
VS中静态库和DLL的使用
5、选择“确定” 按钮以保存对项目属性所做的更改。

最后,在菜单栏上选择“生成”>“生成解决方案”来生成应用程序 。

VS可配置输出路径

在lib的属性页中可配置lib最终输出位置和修改名称。
VS中静态库和DLL的使用
dll的输出路径和名称也可进行修改:
VS中静态库和DLL的使用
注意dll和lib的属性页是不同的,lib没有连接器选项,而dll没有文件管理程序这一项。文章来源地址https://www.toymoban.com/news/detail-479226.html

到了这里,关于VS中静态库和DLL的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElementPlusError:[ElPagination] 你使用了一些已被废弃的用法,请参考 el-pagination 的官方文档

    💂 个人网站: 【紫陌】【笔记分享网】 💅 想寻找共同学习交流、共同成长的伙伴, 请点击【前端学习交流群】 今天在做项目的时候突然发现控制台有一个警告但是不影响使用,之前还没有的,今天竟然出现。我就怀着好奇看看到底是什么问题。我用的是ElementPlus。 控制台

    2023年04月20日
    浏览(40)
  • C# 微软官方学习文档

    链接:https://learn.microsoft.com/zh-cn/dotnet/csharp/ 在C#的学习过程中,我们可以参考微软官方的学习文档。它是一个免费的学习平台,提供了丰富的C#学习路径和教程(如下图),对我们入门到高级应用开发都很有帮助。 如果我们想初步了解可以看 了解如何使用C# 模块: 学习或查

    2024年04月25日
    浏览(46)
  • BehaviorTree 行为树详解 完整版 (参考官方文档)

    1.1 简介 行为树是控制“任务”执行流的 分层节点树 。 树节点的类型 子节点计数 笔记 控制节点 1...N 通常,根据其兄弟姐妹或/和自己的状态的结果勾选孩子。 装饰器节点 1 除其他外,它可能会改变孩子的结果或多次勾选它。 条件节点 0 不应更改系统。不得返回运行。 动作

    2024年02月03日
    浏览(34)
  • Visual Studio中C++部分的官方文档链接【微软(Microsoft)所有产品的官方文档链接】

    目前(2022年07月),微软官方网站上关于Visual Studio的文档,最老的版本也是VS2015了,如下图所示: 微软所有产品的文档目录: 中文版:https://docs.microsoft.com/zh-CN/documentation/ 英文版:https://docs.microsoft.com/en-us/documentation/ Visual Studio中C++部分的官方文档: 中文版:https://docs.microso

    2024年02月07日
    浏览(68)
  • Word处理控件Aspose.Words功能演示:使用 C# 在 Word 文档中创建和修改 VBA 宏

    Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处理,并允许将各类文档导出或转换为固定布局文件格式和最常用的图像

    2024年02月03日
    浏览(43)
  • 运维系列(仅供参考):官方文档翻译 -- 开始 Elasticsearch 入门

    想快速入门,来看 官方文档吧!!! 个人翻译版 Github地址,英语水平有限,有错误或遗漏的欢迎留言指正。 准备好如何使用 Elasticsearch 来测试驱动使用 REST APIs 来存储、查询、分析数据了吗? 遵循如下开始教程: 获取一个 Elasticsearch 实例并启动运行 添加索引实例文档 使用

    2024年04月27日
    浏览(62)
  • C#合并多个Word文档(微软官方免费openxml接口)

    g 详情了解... 

    2024年02月04日
    浏览(50)
  • 动态库和静态库的使用

    库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。就是将源代码转化为二进制格式的源代码,相当于进行了加密,别人可以使用库,但是看不到库中的内容。 常见的库类型 共享库 静态库 动态库 win32平台下,静态库通常后缀为.lib,动态库为.dll 。 linux平台下

    2024年02月03日
    浏览(87)
  • Linux中静态库和动态库的使用

    介绍: 库是一个二进制文件,包含的代码可被程序调用 标准C库、数学库、线程库… 库有源码,可下载后编译;也可以直接安装二进制包 位置一般放在:/lib /usr/lib 库的知识 库是事先编译好的,可以复用的代码 在os上运行的程序基本上都要使用库,使用库可以提高开发效率

    2024年01月25日
    浏览(38)
  • 最新Elasticsearch8.4.3 + Kibana8.4.3在云服务器Centos7.9安装部署(参考官方文档)

      最近笔者学习Elasticsearch,官方最新稳定版为 Elasticsearch-8.4.3,想在云服务器上Centos7.9搭建。搭建之路坑多路少啊(指网上的博文教程五花八门,基本都是ES7版本居多,ES8有少数,各种配置参数一头雾水,细节不多说,照搬了踩坑跌得头破血流),对小菜的我来说,简直要

    2024年02月02日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包