我们将创建的下一个库类型是静态库 (lib)。 使用静态库是重用代码的一种绝佳方式。 您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。
本演练演示如何完成以下任务:
创建静态库项目。
向静态库添加类。
创建引用静态库的控制台应用程序。
在应用程序中使用静态库的功能。
运行该应用程序。
<a></a>
在“文件”菜单中,选择“新建”,然后选择“项目”。
在“项目类型”窗格中,选择“visual c++”下的“win32”。
在“模板”窗格中,选择“win32 控制台应用程序”。
为项目选择一个名称(例如 mathfuncslib),并将该名称输入“名称”字段。 为解决方案选择一个名称(例如 staticlibrary),并将该名称输入“解决方案名称”字段。
单击“确定”启动 win32 应用程序向导。 在“win32 应用程序向导”对话框的“概述”页中,单击“下一步”。
在“win32 应用程序向导”的“应用程序设置”页中,选择“应用程序类型”下的“静态库”。
在“win32 应用程序向导”的“应用程序设置”页中,清除“附加选项”下的“预编译头”复选框。
单击“完成”创建项目。
若要为新类创建头文件,请从“项目”菜单中选择“添加新项”。 将显示“添加新项”对话框。 从“类别”窗格中,选择“visual c++”下的“代码”。 从“模板”窗格中选择“头文件(.h)”。 为头文件选择一个名称(例如 mathfuncslib.h),然后单击“添加”。 将显示一个空白文件。
添加一个名为“mymathfuncs”的类以执行常见的算术运算,如加、减、乘和除。 为此,请将 mathfuncslib.h 的内容替换为下面的代码。
若要为新类创建源文件,请从“项目”菜单中选择“添加新项”。 将显示“添加新项”对话框。 从“类别”窗格中,选择“visual c++”下的“代码”。 从“模板”窗格中,选择“c++ 文件(.cpp)”。 为源文件选择一个名称(例如 mathfuncslib.cpp),然后单击“添加”。 将显示一个空白文件。
在源文件中实现 mymathfuncs 的功能。 为此,请将 mathfuncslib.cpp 的内容替换为下面的代码。
若要将项目生成为静态库,请从“项目”菜单中选择“属性”。 在左窗格中,选择“配置属性”下的“常规”。 在右窗格中,将“配置类型”更改为“静态库(.lib)”。 单击“确定”保存更改。
编译该静态库,方法是选择“生成”菜单中的“生成解决方案”。 这将创建一个可供其他程序使用的静态库。
若要创建将引用并使用刚创建的静态库的应用程序,请从“文件”菜单中选择“新建”,然后选择“项目”。
为项目选择一个名称(如 myexecrefslib),并将其键入“名称”字段。 在“解决方案”旁边的下拉列表框中选择“添入解决方案”。 这会将新项目添加到该静态库所属的同一个解决方案中。
单击“确定”启动“win32 应用程序向导”。 在“win32 应用程序向导”对话框的“概述”页中,单击“下一步”。
在“win32 应用程序向导”的“应用程序设置”页中,选择“应用程序类型”下的“控制台应用程序”。
在“win32 应用程序向导”的“应用程序设置”页中,清除“附加选项”下的“预编译头”。
创建控制台应用程序后,该向导将为您创建一个空程序。 源文件的名称与您在前面为项目选择的名称相同。 在本示例中,名为“myexecrefslib.cpp”。
将显示“添加引用”对话框。 “项目”选项卡列出了当前解决方案中的各个项目以及可以引用的所有库。 在“项目”选项卡中,选择 mathfuncslib。 单击“确定”。
若要引用 mathfuncslib.h 头文件,必须修改包含目录路径。 在 myexecrefslib“属性页”对话框中,展开“配置属性”节点,展开“c/c++”节点,然后选择“常规”。 在“附加包含目录”属性值中,键入 mathfuncslib 目录的路径或浏览至该目录。
若要浏览至目录路径,请在属性值下拉列表框中单击“编辑”。 在“附加包含目录”对话框中的在文本框中选择一个空行,然后单击行尾的省略号按钮(“…”)。在“选择目录”对话框中,选择 mathfuncslib 目录,然后单击“选择文件夹”保存所做的选择并关闭对话框。 在“附加包含目录”对话框中,单击“确定”。
现在即可在此应用程序中使用 mymathfuncs 类。 为此,请将 myexecrefslib.cpp 的内容替换为下面的代码。
通过从“生成”菜单中选择“生成解决方案”,生成可执行文件。
确保选择“myexecrefslib”作为默认项目。 在“解决方案资源管理器”中,选择 myexecrefslib,然后从“项目”菜单中选择“设为启动项目”。
若要运行项目,请选择“调试”菜单中的“开始执行(不调试)”。 输出应该与下面的内容类似: