封装自己的库

“不要重复造车轮”,这是程序界的经典名言。有很多代码,都有重复使用的可能。如果将这些代码积累起来,形成自己的代码库,那么,日子一久,这个代码库就是一笔财富。当需要其中某个功能的时候,把以前的代码拿出来直接用就是了。这样,不仅提高了工作效率,同时还可以防止重新编码带来的错误,因为代码库里的代码在以前一定是经过严密测试的。

那么,如果积累自己的代码库呢?这里可是仁者见仁,智者见智。对于C++程序员,封装成库无疑是最好的选择。但库分静态库和动态库,他们各有千秋,不分仲伯。

静态库适用于封装比较短小精悍的功能,而且被其他程序调用时,适合编译到最终的可执行文件里去,而不是“裸露”到外面成为单独一个文件,随安装包一起发行。所以,静态库使得程序的发行更为方便。另一方面,静态库的调用只需要包含头文件和链接静态库,然后就可以直接使用头文件里的封装类了。

动态库适用于把某个方面的多个功能一同封装到一个库里。Windows的API函数就是封装在三个(Kenerl.dll, GDI32.dll, User32.dll)动态链接库里的。动态链接库在程序发行时,要随安装包一起发行。 

下面先来看在VC++6.0里如何封装一个静态库。

1、创建静态库

这个静态库将一个内存池类封装起来。

(1)、新建一个静态库项目wsMemPool,如下图:

                       

注意,工程类型要选Win32 Static Library,表示静态库项目。

(2)、假如我们已经写好了CMemPool类,现在将类的头文件和源文件拷贝到当前工程所在的磁盘目录,然后通过菜单“Project”-〉“Add To Project”-〉“Files”添加到项目里。最后项目的文件视图如下:

                       

(3)、编译,生成了静态库文件wsMemPool.lib。

2、测试静态库。

现在假设有一个项目,要用到内存池,那么刚才的静态库就可以有用武之地了。

(1)、新建一个控制台的测试项目Test,如下图:

                     

单击“OK”,然后选择“A simple application”这种控制台类型。

(2)、将刚才的静态库wsMemPool.lib文件和内存池类的头文件MemPool.h拷贝到Test工程的目录下。然后在Test.cpp里调用静态库:

1.         #include "stdafx.h"

2.         #include <stdio.h>

 

3.         #include "MemPool.h"

4.         #pragma comment(lib, "wsMemPool.lib")

 

5.         int main(int argc, char* argv[])

6.         {

7.             CMemPool obj;

8.             obj.SetBufferSize(1024);

9.             char * pszMem = (char *)obj.AllocateBuffer();

10.         strcpy(pszMem, "我是一个帅哥!\n");

11.         printf(pszMem);

12.         obj.ReleaseBuffer(pszMem);

 

13.     return 0;

14.     }

 

第3行就是包含静态库的头文件,以便程序调用里面的类。第4行就是要求程序链接静态库,这样最后的可执行程序就不在需要lib文件随安装包一起发布了。

(3)、程序运行结构如下:

                                

     从例子可以看出,静态库的调用非常简单。不过C++的静态库文件不方便被其他语言调用。如果封住的功能需要被其他语言调用,最好以API函数的形式封装成动态库,甚至COM组件。

posted @ 2013-07-25 17:41  foundwant  阅读(1104)  评论(0编辑  收藏  举报