达内LOGO和北京达内网址达内科技培训项目:Java培训 3G培训 Android培训 软件测试培训北京达内服务电话
C++培训
C++培训:VC++动态链接库(DLL)编程学习

 最近在学习动态链接库(DLL),估摸着学好后把平时用的算法和数据结构都封装到DLL里去。于是开始查阅各种书籍、资料。顺便做个学习笔记,以便将来复习之用。
   
    1、我们需要了解什么是动态链接库(DLL):
   
    DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。在Debian系统中常常是。so的文件。
   
    2、动态链接库(DLL)的优点:
   
    1)扩展应用程序的特性
   
    2)简化项目管理
   
    3)节省内存
   
    4)促进资源的共享
   
    5)促进本地化
   
    6)有助于解决平台间的差异
   
    7)可以用于特殊目的
   
    说了这么多,其实我就是想把原来写过的函数写成模板,导出到DLL中,方便以后调用而已。
   
    下面就来说说最简单的DLL的编写方法。
   
    先从头文件说起,给出一个简单的例子(MyDll.h):
   
    #ifndef _MYDLL_H
   
    #define _MYDLL_H
   
    #ifdef __cplusplus
   
    extern "C" {
   
    #endif
   
    // 需要导出的函数或变量需要加__declspec(dllexport),
   
    // 此处我们可以用自己的符号来代替它
   
    #ifndef DLLEXPORT
   
    #define DLLEXPORT __declspec(dllexport)
   
    #endif
   
    DLLEXPOET void fun(void);
   
    //定义你的函数
   
    #ifdef __cplusplus }
   
    #endif #endif /* _MYDLL_H */
   
    然后我们在MyDll.cpp文件里将其实现
   
    #include "MyHead.h"
   
    DLLEXPORT void fun(void)
   
    {
   
    //实现你的代码
   
    }
   
    我在头文件里使用了extern "C" { … } , 这是由于C++编译器支持函数重载,它在编译程序时会将函数的符号按照一定的规则进行修饰,这时我们就不能用fun()来调用这个函数了,这并不是我们所希望的。所以我们在头文件的地方加上了extern "C" { … } , 使C++编译器按照C语言的方式进行编译,同时函数和变量能在本模块和其他模块中使用。
   
    我们编译生成后会产生2个文件。dll文件和。lib文件,在使用时我们需要将头文件和。lib文件同时拷贝到项目的source文件夹内,而。dll文件则是用于其他程序动态链接使用。

苏州达内

客服系统