一、静态库(求面积)
1、用vs05建立一个空解决方案“测试动态链接库”
这样就能将我以后建的项目放在一起。
2、静态库dlltest的建立,新建一个Win32的项目“DllTest”在应用程序设置时选择“静态库”。
3、添加一个头文件“DllTest.h”
#include <math.h>
class Rect;
void __stdcall GetRectClassPointer( Rect** );//用于new一个Rect对像
void __stdcall AssignRect( Rect* pRect, int x1, int y1, int x2, int y2 );//赋值
int __stdcall AreaOfRect( Rect* );//求面积
注:DllTest.h是我们在使用库的时候必须也要加上的,相当于做声明用,所以在这里我们要将class Rect的定义不放到这里,因为这里别的程序员在使用你的库时可以看到的,为了达到隐藏的作用,我们一般将函数与类的定义放在相应的cpp文件中进行。头文件一般只做声明。
4、添加DllTest.cpp文件
class Rect
{
public:
int x1, y1, x2, y2;
};
void __stdcall GetRectClassPointer( Rect** ppRect )
{
*ppRect = new Rect;
}
void __stdcall AssignRect( Rect* pRect, int x1, int y1, int x2, int y2 )
{
pRect->x1 = x1;
pRect->x2 = x2;
pRect->y1 = y1;
pRect->y2 = y2;
}
int __stdcall AreaOfRect( Rect* pRect )
{
return ( pRect->x2 - pRect->x1 ) * ( pRect->y2 - pRect->y1 );
}
5、点击编译运行,这样我们的静态库就可以了,把生成的DllTest.lib与声明的头文件DllTest.h文件拖入我们要用到的项目中即可。
下面我们测试一下我们刚生成的库。
首先,像刚才那样建立一个新Win32控制台空项目。
添加一个main.cpp文件
#include <iostream>
#include "DllTest.h"
#pragma comment( lib, "DllTest.lib" )
int main( void )
{
Rect* pRect;
GetRectClassPointer( &pRect );
AssignRect( pRect, 10, 10, 20, 20 );
std::cout << AreaOfRect( pRect ) << '\n';
return 0;
}
运行一下
至此我们的静态库就完了。
二、静态链接动态库
1、像刚才一样,建一个空的解决方案“静态链接动态库”
2、同样添加一个Win32项目“DllTest”,在应用程序设置时选择DLL与空项目
3、添加一个DllTest.h头文件
#include "stdio.h"
void __stdcall _printf(char *);
4、添加一个DllTest.cpp文件
#include "DllTest.h"
void __stdcall _printf(char * str)
{
printf("%s\n",str);
}
5、注意添加一个DllTest.def模版文件
6、里面添加如下代码
LIBRARY "DllTest" //这是链接库的名字
EXPORTS
_printf //这是你对外的接口名字,也就是刚定义的函数名
7、编译一下,把生成的Dlltest.lib、DllTest.dll与DllTest.h文件放入你的新项目就行了
8、测试新建一个Win32控制台的空项目,添加main.cpp
#include <iostream>
#include "DllTest.h"
#pragma comment (lib,"DllTest.lib")
void main()
{
char *str = "Hello dll!";
_printf(str);
}
9、编译运行
至此,我们的两个链接库就学完了,当然还有其它的几种以后慢慢学...嘻嘻