• 封装自己的库


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

    那么,如果积累自己的代码库呢?这里可是仁者见仁,智者见智。对于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, "我是一个帅哥!
    ");
    
    11.         printf(pszMem);
    
    12.         obj.ReleaseBuffer(pszMem);
    
     
    
    13.     return 0;
    
    14.     }

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

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

                                    

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

  • 相关阅读:
    预搜索,不匹配;反向预搜索,不匹配
    反向引用 /1, /2...
    贪婪与非贪婪模式
    其他一些代表抽象意义的特殊符号
    修饰匹配次数的特殊符号
    自定义能够匹配 ' 多种字符' 的表达式
    能够与 ' 多种字符' 匹配的表达式
    6)添加带有颜色的那个画板
    5)添加快捷键
    4)记住我的图形
  • 原文地址:https://www.cnblogs.com/foundwant/p/3214823.html
Copyright © 2020-2023  润新知