MFC动态链接库的创建和调用(类和函数的dll导出和调用)

合集下载

mfc 扩展dll用法

mfc 扩展dll用法

mfc 扩展dll用法MFC(Microsoft Foundation Classes)是Microsoft提供的一套用于构建Windows图形用户界面(GUI)应用程序的C++类库。

MFC扩展DLL (Dynamic Link Library)通常用于在MFC应用程序中引入额外的功能或模块,以便于代码的组织和模块化。

以下是使用MFC扩展DLL的一般步骤:1.创建MFC DLL项目:在Visual Studio中,您可以选择创建一个MFC DLL项目。

这会生成一个具有MFC支持的DLL项目的基本框架。

2.实现DLL功能:在DLL项目中,您可以添加或实现所需的功能和类。

这些功能可以包括窗口、对话框、控件、业务逻辑等。

3.导出功能:对于需要在DLL外部使用的函数或类,需要在其声明前添加AFX_EXT_CLASS宏,以便正确导出。

例如:class AFX_EXT_CLASS MyExportedClass {//...};extern "C" AFX_EXT_CLASS void AFXAPI MyExportedFunction();4.生成DLL:构建DLL项目以生成DLL文件。

5.在主应用程序中使用DLL:在MFC主应用程序项目中,您需要做以下操作:•将DLL的头文件包含到主应用程序中。

•将DLL的.lib文件链接到主应用程序项目。

•将DLL的.dll文件与主应用程序的可执行文件放在相同的目录或系统路径下。

6.调用DLL中的功能:在主应用程序中,您可以通过类似以下方式调用DLL中的函数或使用DLL中的类:#include "MyDLL.h"//...MyExportedFunction(); // 调用DLL中的函数MyExportedClass myObj; // 创建DLL中的类的实例7.清理:在主应用程序中确保正确处理DLL资源的加载和释放,以避免内存泄漏等问题。

创建动态链接库时设置导出函数的方法

创建动态链接库时设置导出函数的方法

创建动态链接库时设置导出函数的⽅法有两种⽅法1.使⽤模块定义⽂件, 2.在要导出的函数前加上 __declspec(dllexport)我们⽤VS2008新建个DLL⼯程,⼯程名为“TestDLL”把默认的源⽂件后缀 .CPP改为.C(C⽂件)int _stdcall MyFunction(int iVariant){return0;}1. 使⽤传统的模块定义⽂件 (.def)新建⼀个后缀为.def的⽂本⽂件(这⾥建⼀个TestDll.Def),⽂件内容为:LIBRARY TestDllEXPORTSMyFunction在 Link 时指定输⼊依赖⽂件:/DEF:"TestDll.Def"2. Visual C++ 提供的⽅便⽅法在01⾏的int 前加⼊ __declspec(dllexport) 关键字通过以上两种⽅法,我们就可以导出MyFunction函数。

我们⽤查看导出的函数:第⼀种⽅法导出的函数为:MyFunction第⼆种⽅法导出的函数为:_MyFunction@4__stdcall会使导出函数名字前⾯加⼀个下划线,后⾯加⼀个@再加上参数的字节数,⽐如_MyFunction@4的参数(int iVariant)就是4个字节__fastcall与 __stdcall类似,不过前⾯没有下划线,⽽是⼀个@,⽐如@MyFunction@4__cdecl则是始函数名。

⼩结:如果要导出C⽂件中的函数,并且不让编译器改动函数名,⽤def⽂件导出函数。

下⾯我们来看⼀下C++⽂件我们⽤VS2008新建个DLL⼯程,⼯程名为“TestDLL”默认的源⽂件后缀为 .CPP (即C++⽂件)。

输⼊测试代码如下:01 int _stdcall MyFunction(int iVariant)02 {03 return 0;04 }为了导出上⾯这个函数,我们有以下⼏个⽅法:3. 使⽤传统的模块定义⽂件 (.def)新建⼀个后缀为.def的⽂本⽂件(这⾥建⼀个TestDll.Def),⽂件内容为:LIBRARY TestDllEXPORTSMyFunction在 Link 时指定输⼊依赖⽂件:/DEF:"TestDll.Def"4. Visual C++ 提供的⽅便⽅法在01⾏的int 前加⼊ __declspec(dllexport) 关键字通过以上两种⽅法,我们就可以导出MyFunction函数。

CC++中动态链接库的创建和调用

CC++中动态链接库的创建和调用
3、在DllDemo.cpp文件中导入DllDemo.h文件,并实现Max(int,int)函数
以下是引用片段: #include "DllDemo.h" DllAPI int __stdcall Max(int a,int b) { if(a==b) return NULL; else if(a>b) return a; else return b; }
LIBRARY MyDll
EXPORTS
Max@1
4、编译程序生成动态连接库。
4、编译程序生成动态连接库
二、用.def文件创建动态连接库DllDemo.dll。
1、删除DllDemo工பைடு நூலகம்中的DllDemo.h文件。
2、在DllDemo.cpp文件头,删除 #include DllDemo.h语句。
3、向该工程中加入一个文本文件,命名为DllDemo.def并写入如下语句:
动态连接库的创建步骤:
一、创建Non-MFC DLL动态链接库
1、打开File —> New —> Project选项,选择Win32 Dynamic-Link Library —>sample project
—>工程名:DllDemo
2、新建一个.h文件DllDemo.h
以下是引用片段: #ifdef DllDemo_EXPORTS #define DllAPI __declspec(dllexport) #else #define DllAPI __declspec(dllimport) extern "C" //原样编译 { DllAPI int __stdcall Max(int a,int b); //__stdcall使非C/C++语言内能够调用API } #endif

MFC常规DLL的创建与访问

MFC常规DLL的创建与访问
维普资讯
M C常规 D L的创建与访 问 F L
谢命坚 湖 南商 务职业技 术学院
1 0 4 205

高 了软 件 开 发和 维 护 的效 率 。 因 此 ,动 态
动态链接 库(L ) Wno s编程 的重要特 色 D L是 i w d
之 一 。Vsa ++ 支持 三 种 D L 即非 MF I I U c L, C
D nmcL k L rr ya i i iay,M C rgl L ,MF n b F eu rD L a C
e tn i L xes nD o L a - Tm y a c L n i o d ie D n mi i n k g, R n u — T m D n m} L n i i e y a c ikn g
隐 式链接 和 显 式链 接 。
示 的 学 生 基 本 信 息 对 话 框 资 源
I TUI O,添加的控件如表 1 DD S NF 所 示 ,创建此对话框类为 C t I f Dl S u n o g。 ( )完善 CS u n o g类 代码 3 t I f Dl
① 打 开 类 向 导 的 M e e r be mb r Vai ls a
A p zr (x ) 1 p Wiade e ̄建一个默认 的单文档应 ]
用 程 序 E DI xS 。
链接库 备受软件技术人 员的青睐 。
1 动态 链 接 库 ( L ) 的概 念 DL
动态 链接 库 ( DYnam i Li c nk Lb ay, 写 为 DL 是 一 个 可 以 被 其 它 ir r 缩 L)
编辑疆 ( 名 ) 姓 编辑鼷 ( 号 ) 学 单逡攘锈 (男 ) 单逸攘锈 (女 ) 缱台鼷 ( 专址 )

(1)MFC调用DLL基本步骤

(1)MFC调用DLL基本步骤

MFC调用DLL基本步骤
2013-5-9
第一步:创建动态链接库
1、创建动态链接库工程
2、选择一个可以到处某些符号的DLL工程
3、添加Add加法函数。

打开Math.cpp文件,在文件最后输入函数代码
打开Math.h文件,在文件中加入函数声明语句,以方便外部调用Add函数
4、按F7或者Build按钮,此时将产生Math.dll和Math.lib文件,在Debug文件夹内,Math.h文件在Debug文件外
第二步在工程中使用DLL
1、在2DCAD中添加调用DLL的对话框并进行设置ID号
2、添加对话框类CTestDllDlg,并添加成员变量
3、将动态链接库文件复制到2DCAD目录下,有三个Math.dll、Math.lib、Math.h
4、给等号按钮添加消息处理
打开CTestDllDlg的OnButtonEqual函数,调用函数实现求和。

修改函数代码如下:
在TestDllDlg.cpp中包含动态链接库Math.dll的头文件Math.h:#include “Math.h”
5、将Math.lib加入到工程链接库
6、在2DCAD程序中弹出CTestDllDlg对话框
为2DCAD添加一个顶层菜单DLL和一个菜单项使用[Math.dll],修改菜单项ID为ID_DLL_MATH,并添加消息处理函数
修改函数如下:
在MainFrm.cpp中包含对话框类头文件:#include “TestDllDlg.h”
6、编译并运行2DCAD程序即可。

MFC 教程 第13章动态链接库_

MFC 教程 第13章动态链接库_

13.2 动态链接库的创建
设计DLL的主要工作是编写库中的函数,方法 与编写一般函数的方法基本相同。但要对库中的 函数进行必要的声明,说明哪些函数是可以导出的, 哪些不可以. 声明DLL导出函数有两种方法: 在.def文件中声明;

使用关键字_declspec(C常规型DLL
常规型DLL可用于MFC应用程序和非MFC应用程序。用 MFC AppWizard创建MFC DLL框架时,在New对话框中 的Projects选项卡中选择MFC AppWizard(dll)选项,在 出现的对话框中选择创建常规型DLL即可。 MFC把DLL的入口函数DLLMain封装在CWinApp中。 导出项目要使用关键字_declspec(dllexport)来说明。
14
13.2 动态链接库的创建
例如
; DLL名字为Sample LIBRARY Sample ; 函数ShowMe为导出函数 EXPORTS ShowMe ;def文件结束
15
13.2 动态链接库的创建



在创建DLL时,编译链接器先使用def文件创建两个文件: 一个导出文件(.EXP)和一个导入库文件(.LIB),然后 使用导出文件再创建DLL文件。 导入库文件中存放了外部应用程序可导入的DLL导出函数 名称的列表,函数的代码则存放在DLL文件中。 外部应用程序使用的文件是导入库文件和DLL文件。

17
;DLL的名称 LIBRARY MFCexp13_1dll ; 声明ShowHello为导出函数 EXPORTS ShowHello ;def文件结束
18
新建一个源文件MFCexp13_1dll.cpp,并在文件中添加如下代码:
#include <windows.h> BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; }

(动态链接库)DLL编写与使用方法

(动态链接库)DLL编写与使用方法

DLL的创建与调用1、DLL的概念DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。

这些可以直接拿来使用。

静态链接库与动态链接库的区别:(1)静态链接库与动态链接库都是共享代码的方式。

静态链接库把最后的指令都包含在最终生成的EXE 文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。

(2)静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。

动态链接库的分类:Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。

非MFC动态库不采用MFC 类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用;MFC规则DLL 包含一个继承自CWinApp的类,但其无消息循环;MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。

2、创建一个DLL2.1 非MFC的DLL2.1.1声明导出函数:extern “C” __declspec(dllexport) int add(int a, int b);其中extern “C”为声明为C编译。

由于C++编译器在编译的时候会造成其函数名的该变,在其他应用程序中导致函数不可调用,而C编译器则不会在编译后改变其函数名。

这样如果用C编译的程序来调用该dll中的函数时,可能会造成找不到该函数。

__declspec(dllexport)表示该函数为DLL输出函数,即其他应用程序可以调用该函数从dll中声明输出函数有两种方式:(1)另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。

dll(动态链接库)的创建和使用

dll(动态链接库)的创建和使用

dll的创建和使用使用C++语言创建dll并使用该dll的演示、说明Dll的创建和使用第一部分创建C风格的dll (4)步骤1:创建dll工程 (4)步骤2:文件改名 (5)步骤3:拷贝文件内容 (6)步骤4:从工程中删掉文件main.cpp,main.h (7)步骤5:继续修改文件mydll.h和mydll.cpp (7)步骤6:编译并生成dll文件 (8)第二部分以间接调用的方式使用.dll (10)步骤1:新建一个控制台工程(UseDll.cbp). (10)步骤2:修改main.cpp。

(11)步骤3:编译,生成UseDll.exe (12)步骤4:拷贝mydll.dll到UseDll.exe所在目录 (13)步骤5:执行UseDll.exe,输出: (13)间接调用Dll的好处 (14)第三部分以直接调用的方式使用.dll (15)步骤1:改写main.cpp (15)步骤2:添加mydll.dll的静态导出库到UseDll工程中 (16)步骤3:编译并执行,输出 (17)直接调用的好处 (18)Dll的优势 (18)调用约定的说明 (18)第四部分创建C++风格的dll(本地方法) (19)步骤1:在mydll.h中新增导出的类 (19)步骤2:在mydll.cpp中实现Cat类 (19)步骤3:编译MyDll,生成mydll.dll,mydll.a (21)第五部分使用本地风格的C++ DLL (22)步骤1:修改UseDll中的main.cpp (22)步骤2:将mydll.a添加到UseDll工程的BuildOptions中 (23)步骤3:编译UseDll工程,生成UseDll.exe (23)步骤4:将MyDll.dll拷贝到UseDll.exe目录下 (23)步骤5:执行UseDll.exe,输出 (23)本地风格的不足 (24)第六部分创建推荐风格的C++ DLL (26)步骤1:修改mydll.h,创建Cat的接口类ICat (26)步骤2:新建类Cat (27)步骤3:实现createCat函数 (29)步骤4:编译,生成mydll.dll (31)第七部分使用推荐风格的C++ DLL (32)步骤1:修改UseDll中的main.cpp (32)步骤2:将第六部分生成的libmydll.a添加到UseDll的BuildOptions中 (33)步骤3:编译UseDll工程,生成useDll.exe (34)步骤4:将第六部分生成的mydll.dll拷贝到UseDll.exe所在文件目录 (34)步骤5:执行,输出 (35)推荐风格的好处: (35)第一部分创建C风格的dll下面以CodeBlocks为例演示说明创建和使用dll,其它开发环境类似步骤1:创建dll工程创建dll工程MyDll.cpp步骤2:文件改名新建两个文件mydll.h和mydll.cpp步骤3:拷贝文件内容将main.h中的核心内容拷贝到mydll.h中再将main.cpp中的部分内容拷贝到mydll.cpp中,并更改include文件名。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.新建MFC DLL工程,取名为:DLL0410
动态链接库的创建和调用(类,函数的DLL导出和调用)
2.在工程中编辑好DLL0410.h,DLL0410.cpp,DLL0410.def三个文件后编译生成对应的dll和lib文件
2.1 DLL0410.h
2.2 DLL0410.cpp
2.3 DLL0410.def
2.4 编辑好上面的3个文件编译后,用dumpbin命令查看是否有函数导出。

(如图所示,sub全局函数和add类的成员函数已经导出)
3.新建一个工程DLL0410test将生成的DLL0410.dll,DLL0410.lib以及DLL0410.h文件拷贝到 DLL0410test工程目录下
4.静态调用:在工程的DLL0410test.cpp文件中导入头文件DLL0410.h,并编写对应的静态调用代码。

同时也要在工程属性链接中加入DLL0410.lib文件。

(如果编译出错有可能是,工程属性中的常规>>字符集>>修改为 使用多字节字符集)
运行成功
5.4.动态调用:只需将生成的DLL0410.dll文件拷贝到新建工程目录下,直接在工程的
DLL0410test.cpp中编写动态调用代码即可。

不用做其他任何连接和导入头文件的操作。

运行成功。

相关文档
最新文档