Windows静态库和动态库演练

发布时间:   来源:文档文库   
字号:
Windows的静态库和动态库:
演练:创建和使用静态库
在本演练中,您将创建一个静态库(LIB,其中包含可供其他应用程序使用的有用例程。使用静态库是重用代码的一种绝佳方式。您不必在自己创建的每个程序中重新实现这些例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。
本演练涵盖以下内容:
创建新的静态库项目
向静态库添加类
创建引用静态库的应用程序
在控制台应用程序中使用静态库的功能
运行应用程序
先决条件
本主题假定您具备C++语言的基础知识。创建新的静态库项目
文件菜单中,选择新建,然后选择项目…”
项目类型窗格中,选择“VisualC++”下的“Win32
模板窗格中,选择“Win32控制台应用程序
为项目选择一个名称,如“MathFuncsLib”,并将其输入名称字段。为解决方案选择一个名称,如“StaticLibrary”,并将其输入解决方案名称字段。
确定启动Win32应用程序向导。“Win32应用程序向导对话框的概述页中,按一步

“Win32应用程序向导应用程序设置页中,选择应用程序类型下的静态库
“Win32应用程序向导应用程序设置页中,取消选择附加选项下的预编译头
完成创建项目。向静态库添加类
若要为新类创建头文件,请从项目菜单中选择添加新项…”。将显示添加新项类别窗格中,选择“VisualC++”下的代码。从模板窗格中选择头文件(.h”。为头文件选择一个名称,如“MathFuncsLib.h”,并按添加。将显示一个空白文件。
添加一个名为“MyMathFuncs的简单类,以执行常见的算术运算,如加、减、乘和除。代码应与以下内容类似:
//MathFuncsLib.hnamespaceMathFuncs{//Returnsa+b
classMyMathFuncs{public://Returnsa-bstaticdouble
staticdoubleAdd(doublea,doubleb;
//Returnsa*b
staticdoubleSubtract(doublea,doubleb;Multiply(doublea,doubleb;DivideByZeroExceptionifbis0
//Returnsa/b//Throws
};}
staticdoubleDivide(doublea,doubleb;
若要为新类创建源文件,请从项目菜单中选择添加新项…”。将显示添加新项类别窗格中,选择“VisualC++”下的代码。从模板窗格中,选择“C++文件(.cpp”。为源文件选择一个名称,如“MathFuncsLib.cpp,并按添加。将显示一个空白文件。
在源文件中实现“MyMathFuncs的功能。代码应与以下内容类似:
//MathFuncsLib.cpp//compilewith:/c/EHsc#include"MathFuncsLib.h"#includeusingnamespacestd;namespaceMathFuncs{MyMathFuncs::Add(doublea,doublebMyMathFuncs::Subtract(doublea,doublebMyMathFuncs::Multiply(doublea,doublebMyMathFuncs::Divide(doublea,doubleb{/b;
}}
{{
{{
double
}
}}double
doubledouble
returna+b;
returna-b;returna*b;if(b==0
thrownewinvalid_argument("bcannotbezero!";}returna

若要将项目生成为静态库,请从项目菜单中选择“MathFuncsLib属性…”。从左窗格中,选配置属性下的常规。从右窗格中,将配置类型更改为静态库(.lib”。按确定保存更改。
注意
如果是从命令行生成,必须分两个步骤来生成程序。首先,使用带编译器选项/cCl.exe编译代码(cl/c/EHscMathFuncsLib.cpp这将创建名为“MathFuncsLib.obj”的对象文件。关更多信息,请参见/c(编译但不链接)。接着,使用库管理器Lib.exe链接代码(libMathFuncsLib.obj。这将创建静态库“MathFuncsLib.lib”。有关库管理器的更多信息,请参LIB引用。
编译该静态库,方法是选择生成菜单中的生成解决方案。这将创建一个可供其他程序使用的静态库。
创建引用静态库的应用程序
若要创建引用并使用刚刚创建的静态库的应用程序,请从文件菜单中选择新建,然后选项目…”
项目类型窗格中,选择“VisualC++”下的“Win32
模板窗格中,选择“Win32控制台应用程序
为项目选择一个名称,如“MyExecRefsLib”,并将其输入名称字段。从解决方案旁边的下拉列表中选择添入解决方案。这会将新项目添加到该静态库所属的同一个解决方案中。
确定启动“Win32应用程序向导。在“Win32应用程序向导对话框的概述页中,一步
“Win32应用程序向导应用程序设置页中,选择应用程序类型下的控制台应用程
“Win32应用程序向导应用程序设置页中,取消选择附加选项下的预编译头

完成创建项目。
在控制台应用程序中使用静态库的功能
创建新的控制台应用程序后,将为您创建一个空程序。源文件的名称与您在前面为项目选择的名称相同。在本示例中,名为“MyExecRefsLib.cpp”
若要使用在静态库中创建的算术例程,必须引用该静态库。为此,请选择项目菜单中的…”。在属性页对话框中,展开通用属性节点,并选择引用然后选择添加新引用…”按钮。有关引用…”对话框的更多信息,请参见属性页对话框->“通用属”->“引用
将显示添加引用对话框。此对话框列出了所有可以引用的库。项目选项卡列出了当前解决方案中的所有项目,以及它们包含的所有库。从项目选项卡中,选择“MathFuncsLib”然后选择确定。有关添加引用对话框的更多信息,请参见添加引用对话框。
若要引用静态库的头文件,必须修改包含目录路径。为此,请在属性页对话框中,展开置属性节点,然后展开“C/C++”节点,并选择常规。在附加包含目录旁边,键入“MathFuncsLib.h”头文件所在的位置的路径。
现在,可以在应用程序中使用“MyMathFuncs”类了。使用以下代码替换“MyExecRefsLib.cpp”的内容:
//MyExecRefsLib.cpp//compilewith:/EHsc/linkMathFuncsLib.lib#include#include"MathFuncsLib.h"usingnamespacestd;intmain({intb=99;
cout<<"a+b="<<
doublea=7.4;
MathFuncs::MyMathFuncs::Add(a,b<<endl;
cout<<"a
cout<<"a-b="<<*b="<<
MathFuncs::MyMathFuncs::Subtract(a,b<<endl;
MathFuncs::MyMathFuncs::Multiply(a,b<<endl;
return0;}
cout<<"a/b="<<
MathFuncs::MyMathFuncs::Divide(a,b<<endl;
通过从生成菜单中选择生成解决方案,生成可执行文件。运行应用程序
确保选择“MyExecRefsLib”作为默认项目。从解决方案资源管理器中,选择“MyExecRefsLib”,然后选择项目菜单中的设为启动项目
若要运行项目,请选择调试菜单中的开始执行(不调试)。输出应如下所示:

a+b=106.4a-b=-91.6a*b=732.6a/b=0.0747475
演练:创建和使用动态链接库
在本演练中,您将创建一个动态链接库(DLL其中包含可供其他应用程序使用的有用例程使用DLL是一种重用代码的绝佳方式。您不必在自己创建的每个程序中重新实现这些例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。
本演练涵盖以下内容:
创建新的动态链接库(DLL项目
向动态链接库添加类
创建引用动态链接库的应用程序
在控制台应用程序中使用类库的功能
运行应用程序
先决条件
本主题假定您具备C++语言的基础知识。创建新的动态链接库(DLL项目
文件菜单中,选择新建,然后选择项目…”
项目类型窗格中选择“VisualC++”下的“Win32
模板窗格中,选择“Win32控制台应用程序
为项目选择一个名称,如“MathFuncsDll”,并将其输入名称字段。为解决方案选择一个名称,如“DynamicLibrary,并将其输入解决方案名称字段。

确定启动Win32应用程序向导。“Win32应用程序向导对话框的概述页中,按一步
“Win32应用程序向导中的应用程序设置页中,选择应用程序类型下的“DLL”(如果可用),或者选择控制台应用程序(如果“DLL”不可用)。某些版本的VisualStudio不支持使用向导创建DLL项目。您可以稍后对此进行更改,以将项目编译为DLL
“Win32应用程序向导应用程序设置页中,选择附加选项下的空项目
完成创建项目。向动态链接库添加类
若要为新类创建头文件,请从项目菜单中选择添加新项…”。将显示添加新项类别窗格中,选择“VisualC++”下的代码。从模板窗格中,选择头文件(.h”。为头文件选择一个名称,如“MathFuncsDll.h”,并按添加。将显示一个空白文件。
添加一个名为“MyMathFuncs的简单类,以执行常见的算术运算,如加、减、乘和除。代码应与以下内容类似:
//MathFuncsDll.hnamespaceMathFuncs{Returnsa+bReturnsa-b//Returnsa*b//Returnsa/b
classMyMathFuncs{public:////
static__declspec(dllexportdoubleAdd(doublea,doubleb;static__declspec(dllexportdoubleSubtract(doublea,doubleb;static__declspec(dllexportdoubleMultiply(doublea,doubleb;//ThrowsDivideByZeroExceptionifbis0
};}
static
__declspec(dllexportdoubleDivide(doublea,doubleb;
请注意上面的方法声明中的__declspec(dllexport修饰符。这些修饰符使DLL能够导出该方法以供其他应用程序使用。有关更多信息,请参见dllexport,dllimport
若要为新类创建源文件,请从项目菜单中选择添加新项…”。将显示添加新项类别窗格中,选择“VisualC++”下的代码。从模板窗格中,选择“C++文件(.cpp”。为源文件选择一个名称,如“MathFuncsDll.cpp,并按添加。将显示一个空白文件。
在源文件中实现“MyMathFuncs的功能。代码应与以下内容类似:

//MathFuncsDll.cpp//compilewith:/EHsc/LD#include"MathFuncsDll.h"#includeusingnamespacestd;namespaceMathFuncs{MyMathFuncs::Add(doublea,doublebMyMathFuncs::Subtract(doublea,doublebMyMathFuncs::Multiply(doublea,doublebMyMathFuncs::Divide(doublea,doubleb{/b;
}}
{{
{{
double
}
}}double
doubledouble
returna+b;
returna-b;returna*b;if(b==0
thrownewinvalid_argument("bcannotbezero!";}returna
若要将项目生成为DLL,请从项目菜单中选择“MathFuncsDll,再选择属性…”。从左窗格中,选择配置属性下的常规。从右窗格中,将配置类型更改为动态库(.dll”。按保存更改。
注意
如果是从命令行生成,请使用/LD编译器选项指定输出文件应为DLL。有关更多信息,请参见/MD/MT/LD(使用运行时库)
编译该动态链接库,方法是选择生成菜单中的生成解决方案。这样就创建了一个可供其他程序使用的DLL。有关DLL的更多信息,请参见DLL创建引用动态链接库的应用程序
若要创建引用并使用刚刚创建的动态链接库的应用程序,请从文件菜单中选择新建,然后选择项目…”
项目类型窗格中,选择“VisualC++”下的“Win32
模板窗格中,选择“Win32控制台应用程序
为项目选择一个名称,如“MyExecRefsDll”,并将其输入名称字段。从解决方案旁边的下拉列表中选择添入解决方案。这会将新项目添加到该动态链接库所属的同一个解决方案中。
确定启动“Win32应用程序向导。在“Win32应用程序向导对话框的概述页中,一步

“Win32应用程序向导应用程序设置页中,选择应用程序类型下的控制台应用程
“Win32应用程序向导应用程序设置页中,取消选择附加选项下的预编译头
完成创建项目。
在控制台应用程序中使用类库的功能
创建新的控制台应用程序后,将为您创建一个空程序。源文件的名称与您在前面为项目选择的名称相同。在本示例中,名为“MyExecRefsDll.cpp
若要使用在动态链接库中创建的算术例程,必须引用该动态链接库。为此,请选择项目菜单中的引用…”。在属性页对话框中,展开通用属性节点,并选择引用然后选择加新引用…”按钮。有关引用…”对话框的更多信息,请参见属性页对话框->“通用属性”->“引用
将显示添加引用对话框。此对话框列出了所有可以引用的库。项目选项卡列出了当前解决方案中的所有项目,以及它们包含的所有库。从项目选项卡中,选择“MathFuncsDll”然后选择确定。有关添加引用对话框的更多信息,请参见添加引用对话框。
若要引用动态链接库的头文件,必须修改包含目录路径。为此,请在属性页对话框中,展配置属性节点,然后展开“C/C++”节点,并选择常规。在附加包含目录旁边,键入“MathFuncsDll.h”头文件所在的位置的路径。
动态链接库仅在运行时由可执行文件加载。必须告诉系统在哪里查找“MathFuncsDll.dll”这是使用PATH环境变量实现的。为此,请在属性页对话框中,展开配置属性并选择调试。在环境旁边,键入以下内容:PATH=toMathFuncsDll.dllfile>,其中toMathFuncsDll.dllfile>应替换为“MathFuncsDll.dll”的实际位置。按确定保存进行的所有更改。
注意
如果要从命令行而不是从VisualStudio内运行可执行文件,必须从命令提示处手动更新PATH环境变量,如下所示:setPATH=%PATH%;toMathFuncsDll.dllfile>,其中toMathFuncsDll.dllfile>应替换为“MathFuncsDll.dll”的实际位置。

现在,可以在应用程序中使用“MyMathFuncs类了。使用以下代码替换“MyExecRefsDll.cpp”的内容:
//MyExecRefsDll.cpp//compilewith:/EHsc/linkMathFuncsDll.lib#include#include"MathFuncsDll.h"usingnamespacestd;intmain({intb=99;
cout<<"a+b="<<
doublea=7.4;
MathFuncs::MyMathFuncs::Add(a,b<<endl;
cout<<"a
cout<<"a-b="<<*b="<<
MathFuncs::MyMathFuncs::Subtract(a,b<<endl;
MathFuncs::MyMathFuncs::Multiply(a,b<<endl;
return0;}
cout<<"a/b="<<
MathFuncs::MyMathFuncs::Divide(a,b<<endl;
通过从生成菜单中选择生成解决方案,生成可执行文件。运行应用程序
确保选择“MyExecRefsDll”作为默认项目。从解决方案资源管理器中,选择“MyExecRefsDll”,然后选择项目菜单中的设为启动项目
若要运行项目,请选择调试菜单中的开始执行(不调试)。输出应如下所示:
a+b=106.4a-b=-91.6a*b=732.6a/b=0.0747475

本文来源:https://www.2haoxitong.net/k/doc/53eaef394431b90d6d85c71c.html

《Windows静态库和动态库演练.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式