动态链接库创建步骤

上传人:ta****u 文档编号:199367509 上传时间:2023-04-10 格式:DOCX 页数:6 大小:173.66KB
返回 下载 相关 举报
动态链接库创建步骤_第1页
第1页 / 共6页
动态链接库创建步骤_第2页
第2页 / 共6页
动态链接库创建步骤_第3页
第3页 / 共6页
点击查看更多>>
资源描述
动态链接库 动态链接库通常不能直接运行,也不能接受消息。他们是一些独立的文件,其中包含能 被可执行程序或其他DLL调用来完成某项工作的函数。只有在其他模块调用动态链接库 中的函数时,它才发挥作用。 Windows API中的所用函数都是包含在DLL中。其中有3个最重要的DLL, Kernel32.dll, 它包含用于管理内存、进程和线程的各个函数;User32.dll,它包含用于执行用户界面任 务(如窗体的创建和消息的传递)的各个函数。 静态库:函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情 况下,编译链接可执行文件时,链接器从库中复制这些函数和数据并把他们和应用程序 的其他模块组合起来创建最终的可执行文件(.EXE文件)。 动态库:在使用动态库的时候,往往提供两个文件:一个引入库和一个DLL。引入库包 含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。在编译链接可执行 文件时,只需要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在运 行的时候,再去加载DLL,访问DLL中的导出函数。 使用动态链接库的好处:1. 可以采用多种编程语言来编写。2. 增强产品的功能。3. 提供二次开发的平台。4. 简化项目管理。5. 可以节省磁盘空间和内存。6. 有助于资源的共享。7. 有助于实现应用程序的本地化 引入方式:1. 隐式引入(直接在项目设置里链接选项卡里导入.LIB的引入文件)2. 显示引入(使用 LoadLibrary、 GetProcAddress、 FreeLibrary) 导出声明使用模版定义文件(.def)作用:禁用名字改编但类不能禁用,类的方法却可以禁用,但调用约定也要 保持一致。LIBRARY “Dll1”EXPORTSaddsubtract 在客服端的使用 在源文件中声明的方式:1. Extern int add(int a, int b);Extern int subtract(int a, int b); 推荐(更快)2. _declspec(import) int add(int a, int b); _declspec(import) int subtract(int a, int b);在头文件中的声明的方式:Dll1.h#ifndef DLL1_API#define DLL1_API extern “C” _declspec(dllimport) #endifDLL1_API int add(int a, int b);DLL1_API int subtract(int a, int b);Dll.cpp#define DLL1_APIextern “C”_declspec(dllexport)#include DLLl.h 包含定义的头文件-Dlll.h注:extern “C”使函数不参见名字改编但是不能导出类只能全局函数。如果函数 的调用约定发生改变也将参加名字改编比如将默认的c语言调用约定改为了 pasca 1调用约定时。实例 为了演示建立动态链接库的一个过程,在此实例中只完成在动态链接库中建立一个类和 两个函数。Stepl.新建一个空的动态链接库工程。Step2.添加一个头文件(DII3.h)录入如下代码:#ifndef DLL3_API#define DLL3_API _declspec(dllimport)#endifDLL3_API int add(int, int);DLL3_API int subtract(int, int);class DLL3_API MyRectanglepublic:MyRectangle(int, int);int GetArea();private:int width_;int height_;Step3.添加一个原文件(D113.cpp )录入如下代码:#define DLL3_API _declspec(dllexport)#include Dll3.hint add(int a,int b)return a + b;int subtract(int a, int b)return a - b;MyRectangle:MyRectangle(int w,int h):width_(w), height_(h)int MyRectangle:GetArea()return width_ * height_;Step4.添加一个模版定义文件(D113.def)录入如下代码:在当前目录下建立一个文本文件更名为 Dll3.def 再导入到工程中即可LIBRARY Dll3EXPORTSaddsubtractGetAreaStep5.编译工程。Step6 .建立一个测试动态链接库的对话框工程(DllTest)Step7.在对话框中添加三个按钮测试动态链接库的函数(库以隐式引入)Step8.把动态链接库工程Debug目录下的Dll3.dll和Dll3.lib以及Dll3.h文件要不 然编译器会找不到你需要的函数和函数的声明。Step9.导入Dll3.h头文件#include ”Dll3.h”SteplO .添加按钮的单击处理事件(双击当前按钮即可)void CTestDllDlg:OnBtnAdd()CString result;result.Format(3 + 5 = %d, add(3, 5);MessageBox(result);/下面是库以显示方式调用,如果使用显示方式就不需要隐式的导入库也不 需要D113.h头文件,因为显示方式是在程序运行后单击按钮才加载的并获取了函 数的地址,所以可以直接调用。/*HINSTANCE hinst;hinst = LoadLibrary(Dll3.dll);typedef int (*FARProc)(int a, int b);FARProc proc;proc = (FARProc)GetProcAddress(hinst, add);if(!proc)MessageBox(没有找到函数地址);return;CString result;result.Format(3 + 5 = %d, (*proc)(3, 5);MessageBox(result);FreeLibrary(hinst);*/void CTestDllDlg:OnBtnSubtract()CString result;result.Format(5 - 3 = %d, subtract(5, 3);MessageBox(result);void CTestDllDlg:OnBtnClass()MyRectangle rect(10, 5);CString result;result.Format(W:10 H:5 A=%d, rect.GetArea();MessageBox(result);SteplO .测试声明:此文档是由孙鑫老师教学视频整理,需要更详细的学习动态链接库的相关知识可以在百度上搜索“孙鑫VC+视频”共20集非常不错的VC+教学视频。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!