c++中DLL文件的编写与实现 | 您所在的位置:网站首页 › dll需要注册吗 › c++中DLL文件的编写与实现 |
一、DLL是什么?
动态链接库(Dynamic Link Library)DLL文件与EXE文件一样也是可执行文件,但是DLL也被称之为库,因为里面封装了各种类啊,函数啊之类的东西,就像是一个库一样,存储着很多东西,主要是用来调用的。调用方式主要分为两种:隐式(通过lib文件与头文件) 与 显式(只通过DLL文件)。 (这是一条弹幕:2019.5.10 很多人私信我 我肥来说下 ,调用方是需要使用三件套的就是.h\.lib\.dll。只使用dll和lib调用的话,我再写一篇好了 地址在这边(点我点我) ) 二、为什么使用DLL? 微软方面一边开源了很多代码,比如MFC的,这些代码是直接暴露在程序员眼皮子底下的,和容易调用,当然也很容易与程序员的代码发生冲突,业内也称之为“白盒复用”,有一定的优势,但是也有弊端。在此基础上,我们再来聊DLL就比较好,DLL将要一系列的代码转化成二进制,直接供程序使用,称之为“黑盒复用”。 动态链接库DLL最大的好处就是节省内存,程序在没有运行到dll里的函数的时候,dll里的函数就没有运行,只有在运行到了dll,才通过dll的接口函数访问dll,这样比直接把函数代码写到主题函数,或静态链接库相比,运行的效率有了很大的提高.其次使用DLL文件编程,其更新也较为方便,不需要与程序链接。 三、怎么样使用DLL?1.首先创建一个空的DLL文件,创建方法:新建——项目——Win32控制台程序——然后取个名字——确定——下一步——选择DLL——勾选空白项目。顺利新建了项目。 2.然后我们在头文件下创建一个头文件这里我们是DLL1.h,输入如下代码: #ifdef CREATEDELL_API_DU #else #define CREATEDELL_API_DU _declspec(dllimport) //当编译时,头文件不参加编译,所以.cpp文件中先定义,后头文件被包含进来,因此外部使用时,为dllexport,而在内部编译时,则为dllimport #endif class CREATEDELL_API_DU animal //需要被外界调用的类(父类) { public: virtual int outDate() = 0; //纯虚函数 void getWide(int x); void getHigh(int y); protected: int wide; int high; }; class CREATEDELL_API_DU cat:public animal //需要被调用的类(子类cat) { public: int outDate(); }; class CREATEDELL_API_DU dog :public animal //需要被调用的类(子类dog) { public: int outDate(); }; int CREATEDELL_API_DU exportDate(); //需要被调用的函数(单独的一个函数,不属于任何一个类)3.在源文件下创建源文件,这里名字为DLL1.cpp,并插入以下代码: #define CREATEDELL_API_DU _declspec(dllexport) #include #include "DLL1.h" using namespace std; //父类中函数实现 void animal::getWide(int x) { wide = x; } void CREATEDELL_API_DU animal::getHigh(int y){ high = y; }//子类cat中数据输出实现 int CREATEDELL_API_DU cat::outDate(){ return (wide + high);wide += wide;high += high; }//子类dog数据输出实现 int CREATEDELL_API_DU dog::outDate(){ return (wide - high); }//函数的实现 int CREATEDELL_API_DU exportDate(){ return 666; }
4.点击生成即可,DLL虽然是可执行文件但是是无法调试的,当你点调试的时候,会提示如下: 5.当生成完之后,我们便可以在项目文件夹下的Debug文件夹中看到DLL1.dll与DLL1.lib,并且在项目文件夹下的DLL1中看到DLL1.cpp。(忽略图表中的绿锁标志)
那么到这里,我们的DLL算是全部搞定了
接下来需要重新新建一个Win32的控制台程序,打开工程,首先引入三个文件,也就是上面看到的.lib .h .dll三个。 工程——属性——配置属性——VC++目录。
包含目录:添加.h所在的文件夹 库目录:添加。lib所在的文件夹 添加后如下: 最后在链接器——输入——附加依赖项中添加DLL1.lib,并且确定。
最后将DLL文件放到新的工程项目的DEBUG目录下 到此添加库成功,现在我们去用代码实现: 在源文件中新建一个新的源文件,这里为test.cpp,并添加如下代码: #include #include"test.h" #include"DLL1.h" using namespace std; bool main() { cout |
CopyRight 2018-2019 实验室设备网 版权所有 |