Visual Studio 软件操作:添加附加依赖项

专栏导航

上一篇:Windows 编程基础:回调函数

回到目录

下一篇:开源项目介绍:VirtuaNES 模拟器

本节前言

对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点,请你自行查阅。

我呢,也会提到一部分的参考课节。但是呢,你不应该依赖于我的主动提及。最好呢,你自己能够多去了解和查看本专栏目录。

本节,我们来讲解一个 Visual Studio 软件的操作技能,添加附加依赖项。

我们开始。

一. 添加附加依赖项有什么用?

在编写 Windows 程序时,我们常常会需要去引用许多的库,也就是去引用各种【.LIB】后缀的库文件。

在默认情况下,我们所编写的 Windows 程序,已经是引用了许多的库了。比如 kernel32.lib,user32.lib,gdi32.lib,等等。

可是,有些时候,我们所要引用的库,并不属于默认的库。这个时候呢,我们就需要自己亲自去指定这些个库了。

比如说,当我们需要调用 PlaySound 函数,来播放【.wav】后缀的音乐文件时,我们就需要用到 winmm.lib 。再比如,当我们去编写一个媒体播放器程序时,我们可能会需要去使用 mf.lib,mfplat.lib,mfuuid.lib,Strmiids.lib 等等的库。

以后有机会,我会领着大家,一起来实现一个简易的媒体播放器程序。预计,在讲完了【菜单】知识以后,我会尝试着领大家编写一个媒体播放器程序。

在这里,我所提到的 winmm.lib,mf.lib,mfplat.lib,mfuuid.lib,Strmiids.lib 等等的库,它们都不属于默认的库,都需要自己亲自操作 Visual Studio 软件,来格外添加这些个库。

所谓的添加附加依赖项,其实就是去添加,我们在程序中使用的【.lib】后缀的库文件。如果我们所需要使用的某个库文件,它属于是默认的库文件,那我们就不需要去格外添加了。

可是,如果,我们需要去使用的库文件,它不属于默认的库文件,我们就需要去格外添加它们。

本节,我们要领着大家一起来添加三个库文件:winmm.lib,mf.lib,mfplat.lib 。

添加这三个库,对于我们本节的示例程序来讲,没有任何用处。没有这三个库,我们的程序照样运行着。添加这三个库,只是为了让大家了解和掌握添加附加依赖项的方法而已。

二. 参考代码

为了向大家讲解添加附加依赖项的方法,我呢,首先得给出参考代码。

参考代码如下。

复制代码
#include <Windows.h>
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR szCmdLine, int iCmdShow)
{
    MessageBox(NULL, TEXT("这是一个 Windows SDK 程序"),
        TEXT("WIndows SDK"), 0);
 
    return 0;
}

上述代码块中的参考代码,就是本专栏第 1 章的代码。大家可以参考下述几篇文章来了解其中的代码逻辑。

参考课节:第1章 :第一个 Win32 程序,头文件

参考课节:第1章 :第一个 Win32 程序,程序入口

参考课节:第1章 :第一个 Win32 程序,MessageBox 函数

本节,我们主要是来借着这样的代码,来讲解,如何在 Visual Studio 软件中添加附加依赖项。

请大家自行建立解决方案、项目和添加 C++ 源文件。

在我这里,我将解决方案与项目名称都命名为【tmp01】,将源文件命名为【WinMain.cpp】。

在这里,我使用 VS2019 来编译程序。编译好了的整个程序以及软件界面如下面的两个截图所示。
图1 图2

参考代码讲完了。

接下来呢,我们来总体地说明添加附加依赖项的步骤。

三. 添加附加依赖项的总体步骤

下面,我来给出添加附加依赖项的几个关键字。

项目,属性,链接器,输入,附加依赖项。

在下一分节,我们来具体讲解添加附加依赖项的步骤。

四. 添加附加依赖项的具体步骤

如本篇文章的第一分节所述,我们要领着大家添加三个库文件,它们是:winmm.lib,mf.lib,mfplat.lib 。

首先呢,我们一起来点选【项目】,【属性】菜单命令,如下图所示。
图3

【项目】菜单,它位于顶层的菜单栏里面,这个好找。【属性】菜单项,根据图3 的红色框线的标注,它的菜单项的名字为【tmp01 属性】。属性菜单项,它的名字,通常是【项目名称 + 属性】。如果你的项目名称为【test_01】,则【属性】菜单项的名字就会是【test_01 属性】。

点选了【属性】菜单项之后,会弹出下图所示的对话框。
图4

在图4 里面,我们找到红色框线所示的【链接器】选项,点击它左边的三角号,展开【链接器】选项,结果如下图所示。
图5

我们在图5 的【链接器】选项下面,找到【输入】字样,点选它,结果如下图所示。
图6

在图6 的右侧上方,我们用红色框线标注出了【附加依赖项】这一项。

在【附加依赖项】的右边,有一个框框。这个框框里面,是这个程序当前所具有的库。

此时,我们刚刚编译好程序,并未在里面添加任何库文件,所以,此时,里面的库文件,都是默认的库。我们来看一看,默认的库都有啥。

在这里呢,窝点击了【附加依赖项】右侧的框框,将鼠标光标定位在框框里面,然后将里面的文本内容给复制了下来。

在这里,我将所复制的内容整理在下面。

kernel32.lib,user32.lib,gdi32.lib,winspool.lib,comdlg32.lib,advapi32.lib,shell32.lib,ole32.lib,oleaut32.lib,uuid.lib,odbc32.lib,odbccp32.lib,%(AdditionalDependencies)

【%(AdditionalDependencies)】这一项,从名字上我们可以猜测,它指的是额外依赖项。除了它之外,其余的项,都是默认的库文件。

我猜,我们程序员手动添加的依赖项,应该都会包含在【%(AdditionalDependencies)】里面。

是不是那么回事儿,大家自己查吧。

在这里,我们来讲解,如何去手动添加库文件,也就是手动添加依赖项。

请大家一起来操作。大家用鼠标左键单击一下【附加依赖项】右边的框框,结果如下图所示。
图7

鼠标光标定位在【附加依赖项】右侧的框框里面以后,出现了一个如图7 的红色框线所示的向下尖角号。我们点击这个向下尖角号。结果如下图所示。
图8

在图8 中,在原本的框框下面出现了一个新的弹出框,这个弹出框里面有着【编辑】字样。我们点击这个【编辑】字样,结果如下图所示。
图9

在图9 的红色框线所标注的地方,是一个输入框,我们可以在里面手动输入各种库文件的名字。

需要注意的是,一个库文件占用一行,输入了一个库以后,如果还需要继续输入库文件名,那就按下回车键,另起一行来输入库文件名。

我们在里面输入三个库文件名,结果如下图的红色框线所示。
图10

为了方便大家的观察,我将图10 所示的对话框的上下方向,给拉高了一点,以便让输入框的高度可以更高一些,以便全部显示三行库文件。

再次提醒大家注意,一个库文件,需要单独占用一行。输入完了一个库文件以后,如果还想再添加库文件,那就按下回车键,另起一行来输入库文件。

如图10 所示,添加好了红色框线所示的三个库文件以后,我们点击右下角的【确定】按钮,回到下图所示的对话框。
图11

如图11 的红色框线所示,我们标注了两个按钮,分别是【应用】和【确定】按钮。

我们先点击【应用】按钮,再点击【确定】按钮。点击了【确定】按钮以后,对话框会关闭掉。我们会回到软件主界面。

这样,我们本节所要添加的三个附加依赖项就添加好了。

之前,我们所编译的程序,是未添加附加依赖项时候的程序。添加好了附加依赖项以后,它并不会自动生效。为了使我们刚刚添加的附加依赖项生效,我们还需要重新编译程序。

请大家依次执行【生成】,【生成解决方案】菜单命令。以编译程序,结果如下面的几个图所示。
图12 图13

看起来,似乎也没啥新玩意儿。似乎是说,我们添加的这三个库文件,没啥用。

实际上,对于本节的示例代码来讲,添加这几个库文件,确实是没啥用。

但是呢,对于某些程序来讲,你想要让程序正常运行,你的确是需要去添加一些个额外的库文件,没有相应的库文件,那么,你的程序里,是用不了某些 Windows 函数的。

总 结

Visual Studio 软件操作知识,也是需要大家去积累一下的。

在这里,我是领着大家学习了一下添加附加依赖项的方法。以后,大家还可能需要去使用软件其他的功能。

慢慢学习,慢慢地积累吧。

本节结束。

专栏导航

上一篇:Windows 编程基础:回调函数

回到目录

下一篇:开源项目介绍:VirtuaNES 模拟器

相关推荐
鹿角片ljp2 小时前
电影管理系统项目详解:基于Java的控制台应用
windows
ChangYan.2 小时前
编译报错:此项目需要缓解了 Spectre 漏洞的库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们
ide·visual studio
-To be number.wan2 小时前
C++ 进阶技巧:如何让 cout << 自定义对象 正常输出?
开发语言·c++
一路往蓝-Anbo2 小时前
C语言从句柄到对象 (三) —— 抛弃 Malloc:静态对象池与索引句柄的终极形态
c语言·开发语言·数据结构·stm32·单片机·算法
序属秋秋秋2 小时前
《Linux系统编程之进程控制》【进程创建 + 进程终止】
linux·c语言·c++·操作系统·进程·进程创建·进程终止
一路往蓝-Anbo3 小时前
C语言从句柄到对象 (二) —— 极致的封装:不透明指针与 SDK 级设计
c语言·开发语言·数据结构·stm32·单片机·嵌入式硬件
上天_去_做颗惺星 EVE_BLUE3 小时前
C++学习:学生成绩管理系统
c语言·开发语言·数据结构·c++·学习
John_ToDebug3 小时前
Chromium WebUI 定制实践:从 C++ 注入到 JS 安全展示全链路解析
javascript·c++·chrome
wenzhangli73 小时前
Ooder框架8步编码流程实战 - DSM组件UI统计模块深度解析
windows·ui