DLL的简单应用

来源:互联网 发布:卷积神经网络十大算法 编辑:程序博客网 时间:2024/06/07 13:46

 DLL(动态链接库) 通常是一个扩展名为dll的文件。用户可以将一些函数编写到dll中,由exe文件执行时载入,然后调用。

DLL 进行编程时有如下有点:

 

1,节省内存和减少交换操作。 很多进程可以同时使用一个 DLL,在内存中共享该 DLL 的一个副本。 相反,对于每个用静态链接库生成的应用程序,Windows 必须在内存中加载库代码的一个副本。

 

2,节省磁盘空间。 许多应用程序可在磁盘上共享 DLL 的一个副本。 相反,每个用静态链接库生成的应用程序均具有作为单独的副本链接到其可执行图像中的库代码。

 

3,升级到 DLL 更为容易。 当 DLL 中的函数发生更改时,只要函数的参数和返回值没有更改,就不需重新编译或重新链接使用它们的应用程序。 相反,静态链接的对象代码要求在函数更改时重新链接应用程序。

 

4,提供售后支持。 例如,可修改显示器驱动程序 DLL 以支持当初交付应用程序时不可用的显示器。

 

5,支持多语言程序。 只要程序遵循函数的调用约定,用不同编程语言编写的程序就可以调用相同的 DLL 函数。 程序与 DLL 函数在下列方面必须是兼容的:函数期望其参数被推送到堆栈上的顺序,是函数还是应用程序负责清理堆栈,以及寄存器中是否传递了任何参数。

 

6,提供了扩展 MFC 库类的机制。 可以从现有 MFC 类派生类,并将它们放到 MFC 扩展 DLL 中供 MFC 应用程序使用。

 

7,使国际版本的创建轻松完成。 通过将资源放到 DLL 中,创建应用程序的国际版本变得容易得多。 可将用于应用程序的每个语言版本的字符串放到单独的 DLL 资源文件中,并使不同的语言版本加载合适的资源。

 

下面简单介绍如何使用dll

 

导入导出dll函数

     编写需要导出的dll函数时,必须加入 _declspec(dllexport) 关键字

 

编译运行了之后,就可以拿来使用了

 


   使用_declspec(dllimport)关键字表示一个函数是导入函数。具体实例如下

 

  1,新建工程,工程名为Temp

  2,将dll工程内的debug目录中的name.dll文件和name.dll.lib 文件复制到Temp工程文件夹中。

  3,添加对dll的连接,和对导入函数的声明      一般在文件头 添加

 

   

 

 

  准备就绪后,就可以像正常函数一样使用导入函数了。

 

 

 

 

类的导入导出

   类的导入和导出其实和函数的导入导出一样,基本步骤完全一样。不过需要注意些细节的问题

 

   例如类的导出编写是在class 之后添加关键字

 

类的导入 同理,此时也只是类的简单声明,其函数的具体表达并未列出,和导入函数一样

 

 

 

 

MFC 动态链接库及其使用

 

  MFC dll 有两种,常规MFC DLL 和扩展 MFC DLL 。前者和win32 dll 相似,唯一不同的是常规MFC dll 可以使用MFC 类库,而 win32 DLL 不行。扩展的MFC dll 不仅可以使用mfc 类库,而且可以导出mfc类库。缺点是不能被非mfc的程序调用

 

 MFC dll 建立好之后,就可以添加资源,编写代码,不过记得需要在相关类之前加入 AFX_EXT_CLASS 宏,表示其导出(导入)声明。编译dll程序,如果出错,去掉如下代码:#include "/add additional include here"

 

导入mfc dll的时候,除了复制dll和lib文件外,在程序中,只要在头部加入

 

dll 链接声明和相应的头文件即可。不需要再对类或者函数进行声明

 

 

 

 

 

dll 函数的调试

 

1,将dll工程目录和调试程序Temp放入同一个工作区,表示只建一个工程

2,加入dll工作空间

3,添加dll.h头文件 将相关的函数,类的导入导出声明写入 头文件中

 

   

 

4,在cpp文件中实现其函数和类,此时需要添加 其头文件的include 声明 在函数和类的实现上

就不再需要田间导入声明,因为头文件中已经声明过了

5,复制最新的dll和lib文件到Temp工程中,同时在工程的代码文件中添加头文件 dll.h即可,不再需要进行导入声明。

6,进行调试

 

 

原创粉丝点击