创建和使用动态链接库.docx

上传人:b****2 文档编号:3090269 上传时间:2023-05-05 格式:DOCX 页数:11 大小:429.91KB
下载 相关 举报
创建和使用动态链接库.docx_第1页
第1页 / 共11页
创建和使用动态链接库.docx_第2页
第2页 / 共11页
创建和使用动态链接库.docx_第3页
第3页 / 共11页
创建和使用动态链接库.docx_第4页
第4页 / 共11页
创建和使用动态链接库.docx_第5页
第5页 / 共11页
创建和使用动态链接库.docx_第6页
第6页 / 共11页
创建和使用动态链接库.docx_第7页
第7页 / 共11页
创建和使用动态链接库.docx_第8页
第8页 / 共11页
创建和使用动态链接库.docx_第9页
第9页 / 共11页
创建和使用动态链接库.docx_第10页
第10页 / 共11页
创建和使用动态链接库.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

创建和使用动态链接库.docx

《创建和使用动态链接库.docx》由会员分享,可在线阅读,更多相关《创建和使用动态链接库.docx(11页珍藏版)》请在冰点文库上搜索。

创建和使用动态链接库.docx

创建和使用动态链接库

使用VS2008创建和调用动态链接库

1. 什么是动态链接库

 A dynamic library consists of routines that are loaded into your application at run time. When you compile a program that uses a dynamic library, the library does not become part of your executable — it remains as a separate unit.

动态链接库是一个函数和变量的集合,在调用它的程序运行时才被加载。

因此,动态链接库和可执行程序是分离的。

使用动态链接库具有以下优点:

(1) 隐藏源代码;

(2)实现代码重用;(3)当程序调用DLL中的函数时不需要重新编译,提高编译速度;(4)当多个程序调用同一DLL中函数时,内存中只有一个副本,节省内存空间;(4)可通过替换DLL来实现程序的维护和升级。

当在应用程序中加载DLL时,有两种方法来调用导出的DLL函数,它们分别为加载时动态链接和运行时动态链接。

在加载时动态链接中,应用程序像调用本地函数一样对导出的DLL函数进行显式调用。

要使用加载时动态链接,请在编译和链接应用程序时提供头文件(.h)和导入库文件(.lib)。

当您这样做时,链接器将向系统提供加载DLL所需的信息,并在加载时解析导出的DLL函数的位置。

在运行时动态链接中,应用程序调用LoadLibrary函数或LoadLibraryEx函数以在运行时加载DLL。

成功加载DLL后,可以使用GetProcAddress函数获得要调用的导出的DLL函数的地址。

在使用运行时动态链接时,无需使用导入库文件。

 可以根据下面的 准则来判断使用哪一种链接方式。

  

(1)启动性能 如果应用程序的初始启动性能很重要,则应使用运行时动态链接。

  

(2)易用性 在加载时动态链接中,导出的 DLL 函数类似于本地函数。

这使您可以方便地调用这些函数。

  (3)应用程序逻辑 在运行时动态链接中,应用程序可以分支,以便按照需要加载不同的模块。

在开发多语言版本时,这一点很重要。

 

2.  创建动态链接库

2.1 打开Visual Studio 2008,File -> New -> Project…,选择Win32 Console Application,Name设置为myDllTest。

 

2.2 Application type设置为Dll,勾选Empty project,单击Finish按钮。

 

2.3 新建myDllTest.h文件,内容如下:

#ifndef MY_DLL_TEST_H

#define MY_DLL_TEST_H

 

#ifdef EXPORTING_DLL

#define API_TYPE __declspec(dllexport)

#else

#define API_TYPE __declspec(dllimport)

#endif

 

API_TYPE double my_add(double x, double y);

API_TYPE double my_subtract(double x, double y);

API_TYPE double my_times(double x, double y);

 

#endif

 

2.4 新建myDllTest.h文件,内容如下:

#include "myDllTest.h"

#define EXPORTING_DLL

double my_add(double x, double y)

{

      return x + y;

}

 

double my_subtract(double x, double y)

{

      return x - y;

}

 

double my_times(double x, double y)

{

      return x * y;

}

 

2.5 分别在Debug和Release模式下编译,这时在文件夹myDllTest\Debug和myDllTest\Release内都有myDllTest.dll和myDllTest.lib文件,将myDllTest\Debug里面的myDllTest.lib重新命名为myDllTestd.lib。

只需保留myDllTest\Release中的dll文件。

 

2.6 myDllTest.dll,myDllTestd.lib,myDllTest.lib和myLibTest.h是我们最终交付给用户的文件。

 

3. 使用加载时动态链接方式调用动态链接库

3.1 如果工程比较大,则可以在本地硬盘的其它位置新建一个文件夹,命名为myDllTest,再新建三个子文件夹bin,include和lib,将DLL文件放到bin中,H文件放到include中,LIB文件放到lib中。

然后打开环境变量编辑器(在开始里面直接输入编辑系统环境变量,然后搜索即可)。

新建环境变量myLibTest,变量值为myDllTest文件夹所在目录。

然后编辑Path环境变量,添加语句%myDllTest%\bin;(不同的语句用;间隔)。

 

3.2  打开Visual Studio 2008,Tools -> Options -> Projects and Solutions -> VC++ Directories,在右端的Show directories for下拉列表中选择Include files,添加记录$(myDllTest)\include。

然后选择Library files,添加记录$(myDllTest)\lib。

单击OK按钮,然后重启电脑。

 工程比较小时,可将DLL,H和LIB文件直接复制到当前工程下,不需要添加环境变量。

这时在包含对应头文件时应当使用双引号而不是尖括号。

 

3.3  新建一个工程,此处假设为Win32 Console Application,新建文件main.cpp,内容如下:

 #include  

#include 

 

using namespace std;

 

#ifdef _DEBUG

#pragma comment(lib, "myDllTestd.lib")

#else

#pragma comment(lib, "myDllTest.lib")

#endif

 

int main(int argc,char **argv)

{

    

     double x = 2.5;

     double y = 1.7;

 

     cout << x << " + " << y << " = " << my_add(x, y) << endl;

     cout << x << " - " << y << " = " << my_subtract(x, y) << endl;

     cout << x << " * " << y << " = " << my_times(x, y) << endl;

 

     return 0;

}

也可以在Project -> Properties中添加相应的Additional Dependences,如下所示。

Debug模式下添加Debug模式下编译的LIB文件,Release模式下添加Release模式下编译的LIB文件。

 

3.4 按下快捷键Ctrl+5,编译程序,输出以下结果。

 

注1:

生成应用程序后,把所需要的DLL文件复制到程序所在目录下。

否则会出现以下错误。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2