链接库的例子

来源:互联网 发布:豆瓣知乎的运营方式 编辑:程序博客网 时间:2024/06/15 11:54

一、静态库(求面积)

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

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

原创粉丝点击