用VC++创建可重用的Dll
1.在VS中创建名为选择模版”Win32 Project” ,创建一个名为”Math”的项目:
2.在向导中,选择程序类型为”Dll”,附加选项为”Empty project”:
3.由于选择的是空项目,所以解决方案管理器中现在还没有任何代码文件。
4.手动添加两个文件:Math.h和Math.cpp,其中包含了一个一个类Math,一个全局函数Multiply()和一个全局变量GlobalVariable:
1: //Math.h
2: #pragma once
3: class Math
4: {
5: public:
6: Math(void);
7: ~Math(void);
8:
9: public:
10: int Add(int a,int b);
11: };
12:
13: int Multiply(int a,int b);
14:
15: extern int GlobalVariable;
1: //Math.cpp
2: #include "Math.h"
3:
4: Math::Math(void){}
5: Math::~Math(void){}
6: int Math::Add(int a, int b)
7: {
8: return a+b;
9: }
10:
11: int Multiply(int a,int b)
12: {
13: return a*b;
14: }
15:
16: int GlobalVariable = 101;
5.打开Math项目的属性对话框,注意,在Configuration Properties—>C/C++—> Preprocessor—> Preprocessor Definitions中已经定义了一个预处理符号:MATH_EXPORTS
6. 编译此项目,将在解决方案的Debug目录下生成一个Math.dll文件,但这个动态链接库是无法直接使用的。如果其他项目想要使用此dll,还需要导出一个lib文件。
7.在Math.h中添加几行预处理指令(用到了项目属性中已定义好的MATH_EXPORTS),并在每个需要导出的类,函数和全局变量前面加上导出标记MATH_API。修改后的Math.h为:
1: //Math.h
2: #pragma once
3:
4: #ifdef MATH_EXPORTS
5: #define MATH_API __declspec(dllexport)
6: #else
7: #define MATH_API __declspec(dllimport)
8: #endif
9:
10: class MATH_API Math
11: {
12: public:
13: Math(void);
14: ~Math(void);
15:
16: public:
17: int Add(int a,int b);
18: };
19:
20: int MATH_API Multiply(int a,int b);
21:
22: extern MATH_API int GlobalVariable;
8.重新编译Math项目,会在解决方案的Debug目录下生成一个Math.lib和一个Math.dll,以及其他几个调试辅助文件。其他项目想要调用Math.dll,只需要添加Math.h头文件,然后链接Math.lib即可。
9.新建一个名为MathTest的Win32控制台项目作为Math.dll的测试程序。
10.添加头文件Math.h,导入Math.lib:
1: //MathTest.cpp
2:
3: #include "../Math/Math.h"
4: #pragma comment(lib,"../Debug/Math.lib")
11.测试Math.dll中所导出的类Math,函数Multiply()和全局变量GlobalVariable:
1: //MathTest.cpp
2:
3: Math math;
4: cout<<"33+44= "<<math.Add(33,44)<<endl;
5: cout<<"20*50= "<<Multiply(20,50)<<endl;
6: cout<<"GlobalVariable= "<<GlobalVariable<<endl;