推广 热搜: page  音视频  使用  个数  选择  搜索引擎  企业  父亲  百度  可以 

DLL的创建与使用

   日期:2024-12-18     作者:enjyf    caijiyuan   评论:0    移动:http://ww.kub2b.com/mobile/news/7057.html
核心提示:一、动态链接库(DLL)动态链接库提供了一种方法,使进程可以调用不属于其执行代码的函数。函数的可执行代码位于一个.dll文件中,

一、动态链接库(DLL)

动态链接库提供了一种方法,使进程可以调用不属于其执行代码的函数。函数的可执行代码位于一个.dll文件中,该文件包含一个或多个已被编译、链接并使用它们的进程分开存储的函数。

优点:

1.扩展了 应用程序的特性

2.可以使用多种编程语言来编写

DLL的创建与使用

3.简化项目的管理

二、依赖项

当某个程序或DLL使用其他DLL或DLL函数时,就会创建依赖项,因此程序就不会再独立了,依赖项如果被破坏,该程序可能出现问题。

三、入口点

在创建DLL时,可以有选择地指定入口点的函数。当进程或线程将它们自身附加到DLL或者将它们自身以DLL分离时,都会调用入口函数。入口函数应该只进行简单的初始化工作,而不应该调用其他DLL函数或者终止函数。

关于创建DLL,我的环境是VS2017,步骤为:文件->新建项目->选择动态链接库(DLL)->完成。在创建的项目中的源文件可以看到有一个已经创建好的dllmain.cpp,这个就DLL入口点的代码了。

四、如何导出(在DLL中实现的)

第一种:

步骤1:向所有需要导出的DLL函数中添加关键字__declspec(dllexport)。

步骤2:要在应用程序中使用导出的DLL函数,必须使用__declspec(dllexport)来声明要导入的各个函数。

本章使用的就是这种方法

通常最好使用一个包含define语句和ifdef语句的头文件,以便分隔导出语句和导入语句,代码如下。

说明:该DLL库实现的是简单的加减乘除运算,注意实现减法的这个函数,我这里特别使用了一个抽象类来实现,我发现有些企业代码都会有这种类似的抽象类,然后用纯虚函数做接口。

第二种:

创建模块定义文件.def以列出导出的DLL函数:

五、特别调用

需要注意以下一些情况:

1.如果使用了Win32 API,则应该使用关键字__stdcall修饰函数

2.如果将C++生成的DLL供标准C语言使用,输出文件用extern "C"来修饰,设置导出函数时采用.def文件形式,而不是__declspec(dllexport)

六、编写DLL

创建DLL工程并且定义了相应的导出函数、变量或类之后,接下来就是实现功能了。本章中因为CExportDll是一个抽象类,所以需要再创建一个它的子类(CExportDllChild.h中),实现相应的接口功能(EXportDll.cpp中),同时其他函数也在(EXportDll.cpp)中实现功能。

创建编写好后,进行生成,可以在项目Debugp目录下看到生成的动态库.dll和静态库.lib

七、调用DLL

调用DLL有两种方法,一种是显式链接方式,另一种是隐式链接方式。

在调用前,先创建一个Win32控制台应用程序或者MFC,这里创建的是一个简单的Win32程序(LoadDll)

1.显式链接:

在此项目中,需要将CExportDllChild.h放在LoadDll目录下。然后在cpp中添加以下代码

调用结果:

2.隐式调用

在程序开始执行时就将DLL文件加载到应用程序中。隐式调用没用过,不做表述了。

本文地址:http://ww.kub2b.com/news/7057.html     企库往 http://ww.kub2b.com/ ,  查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新文章
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新文章
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号