链接库的例子

一、静态库(求面积)

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、编译运行

至此,我们的两个链接库就学完了,当然还有其它的几种以后慢慢学...嘻嘻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值