版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、将现有的C+类转换成dll动态链接库张步阳2011.7.10l.dll的类型首先介绍一 l、dll的类型,读者必须根据自己要转换类的类熨,选择合适的dll类型,否 则转化不会成功。常用的dll类型包括:Win32 DLL. MFC常规DLL.MFC扩展DLL及资源DLL。1.1. Win32 DLL指不便用MFC类库创建的DLL。Win32 DLL中的导出函数通常使用拯准的丄搔LL这牝 函数町以被MFC或非MFC应用程序调用。1.2. MFC 常规 DLLMFC常规DLL町以使用MFC來创建,可以导出C风格的旳数,但不能导出C+类、成 员函数或1E我函数。它们町以被MFC或非MFC应用程序调用
2、。但这种类型的DLL不能向应 用程序传递MFC对象指针,必须使用MFC扩展DLLo MFC常规DLL按照与MFC的链接方式 又分动态链接和静态徒接两种。1.3. MFC 扩展 DLL表而上更像应用程序而不像一组换数的集介,因为它町以创建MFC派生类。只能以动 态方式巧MFC链接,而II只能是使用MFC的动态锻接版本的应用程序才町以使用这种DLL. 在MFC扩展DLL中,可以由现有的MFC类导出自己的类,然后给应用程序一个扩展的MFC 版本。支持C+接II,也就是说.该DLL町以Y出整个类,客门町以构造这些爻的对線或从 这吐类进行派生。还町以用J:在应用程序和DLL Z间传递MFC导出对象。对象
3、的成员两数 位于创建对彖的模块中,应用程序和它加载的扩展DLL之间可以自幼地传递MFC或MFC导 出对彖的指针。14资源DLL只包含岛要共享的资源,如菜单、字符串、图标、位图、对话框等。资源DLL -般都是 不使用MFC的Win32 DLL。如果多个程序要共享同 组资源,-个好的解决办法就是将这些 资源放在一个资源DLL中。总结:从以上看出,仅有MFC扩展DLL町以导出C+类及类中的成员函数,也町以导出 MFC灸及成员函数。而対匸MFC常规DLL町以使用MFC但圧不能导出类及灸成员函数,如 果想导出类中的成员旳数,只能将成员函数转化成全局两数。32.将现有的C+类转换成dll动态链接库卜面介绍
4、两种方法,方法1是使用MFC常规DLL将类的成员函数转化成全局函数.然后 导出,方法2是使用MFC扩展DLL直接导出类。2丄使用MFC常规DLL第1步:选择File|New菜单项,在弹出的New对话框中选择Projects标签,在工程列表中选择MFC AppWizard (dll),并输入工程名 BuildRegulardll,如图 所示。f ai«s Pw.d. | WockoMvo* | Other Oocwmcatt | .£ATL COM AppWizardAetourte Type Wizard迅 ApfiWrardDatabase ProjerfProject
5、name:W DMludio Ad4 in Wizard S Fxicn4ctf Slorrd Proc Wirncd OlSAPI Extenoi«n Wi“rdA NewWiziwd码 llffllly ProjectAppKcfllon二MiJ2 Cmyoie “p4l5“ vWVi3? DeEgIIM I bary © Win32 Sutic IMiraryI *010 :C-V)OCUMFNTS ANOlHTlNGS “' C(eele new w如occC 切* lo(4K*cn<厂 Dependency otI3WIQ?OK | CH图2-1第2
6、步:选择“Regular DLL using shared MFC DLL”,点击Finish按钮,完成动态常规dll工程创建,如图2 2所示。AytomaKo ngmdci Seckrt«Watild yoe like Io gmerate source fill? commefitu7 Yes. pleaseNoz thank you< BackFinishCanal图2-29将耍准备导入的类复制到当前匚程文件夹卜:然后双击打开,点击右键.将耍转换类的头文 件InitFile.h和源文件InitFile.cpp分别导入到当前工程中,如图2-3所示。F目应该充加曹库Itser
7、t m icto frcjcct |WldXgZlL IICteck Oct=1 Li ststixxa二nfo/Include -strtaFx旷 include -321.IT includp "InitTilo.h" Unclude a<lRagehlp«lfdeF _DLBUG lundef IHIS_FILE static ch刖 tdcFine new DEBUCNtw *mdif图2-3第3步: 由于要将类ClnitFile的成员函数导出,因此必须建立一个类的静态对象,为CinitFile添加 函数Instance!),修改initFile.c
8、pp文件代码如下:ClnitFile* ClnitFile:lnstance()static ClnitFile Init;类的静态对象return &lnit;J 在initFile.h文件中增加该函数的声明,同时添加以卜宏定义:/define InitFile (ClnitFile:lnstance()第4步:(D将类的成员函数対装成全局函数。为了能导出全局函数,在本工程的BuildRegulardll.h «|« 加入以下宏定义:#define MYEXPORT_declspec(dllexport)在本匸程的BuildRegulardll.cpp中为要导出的
9、GetFloat等函数添加如卜代码:include "InitFile.h"MYEXPORT float GetFloat(CString Section, CString Item, float Value)用來正确切换MFC模块mfc42.dll状态AFX_MANAGE_STATE(AfxGetStaticModuleState();/ InitFile为在第3步中的宏定义,GetFloat为类的成员函数 return lnitFile->GetFloat(Section, Item, Value);J直它函数略 注释:MYEXPORT为第4步的宏定义。创建-个与
10、MFC动态连接的常观dll时石耍添加AFX_MANAGE_STATE(AfxGetStaticModuleState()用來正确切换 MFC 模块 mfc42.dll 状态, (D回到BuildRegulardll.h文件,添加函数的声明:float MYEXPORT GetFloat(CString Section, CString Item, float Value);第5步:按F7或点击匚只栏上的BuiJ 圜I按钮,生成dll。如果点击!会出现如图图2-4所示対话 框,直接点击"Cancel"按钮取消即可。图2-4浏览本工程文件夹下的Debug文件夹,可以看到生成的B
11、uildRegulardll.dll文件和 BuildRegulardll.lib 文件。2.1.2.测试和使用DLL第1步:另外新建一个名字为InitlnidllTest的工程,添加相应的界面(本教程省略)。将刚才生成的 BuildRegulardll.dll 文件、BuildRegulardll.lib 文件及头文件 BuildRegulardll.h 拷贝到当前工程文 件夹卜,然后使用快捷键“Alt+F7”,打开Project Settings的Link选项页,在Object/library modules 中输入 BuildRegulardll.lib.如图 2-5 所示。图2-5第2
12、步:在该工程中要使用dll导出函数的cpp文件中,添加如F代码:include "BuildRegulardll.h"然后就町以肖接调用导出的函数了,如卜面的代码所示:m_f width=GetFloat(section/"width"/m_fwidth);运行该测试程序,结杲如图2-6所示。图2-622使用MFC扩展DLL2.2.1.创建 DLL第1步:选择File|New菜单项,在弹出的New对话框中选择Projects标签,在匸程列表中选择MFC AppWizard (dll),并输入工程名Builddll,如图27所示。图2-7第2步:(D选择“
13、MFC Extension DLL”,点击Finish按钮,完成动态常规dll工程创建,如图2-8所示。图2-8将耍准备导入的类复制到当前工程文件夹卜;然后双击打开,点击右键,将要转换类的头 文件InitFile.h和源文件InitFile.cpp分别导入到当前工程中,如图2-9所示。/画 Cep/+ 1;且应该顾敦库Ltseri File ic.to Zrcject > |Z 2Cl LiltUnclude -stdafx 旷Unclude -321.h-e Include MlnitFile.h" alncludo Imagehip.rirnpf _DrniiB lunde
14、f THIS FILEstatic char IHIS_FILFJ_ Mef-ino neu DfcBUGHEW图2-9第3步:在类的头文件 nitFile.h 中修改将 class ClnitFile 为 class AFX_EXT_CLASS ClnitFile 如图 2-10 所 示。class AFX_EXT_CLASS ClnitFilepublic:CInitFileO;uirtual CInitFile();CString mstrFileParaPath;float GetFloat(CString Section, CString Item, Float Ualue);BOO
15、L SetFloat(CString Section, CString It已叭 float Ualue);CString SetFileName(CString NewFolderName String FilpNane);CString SetFileNane(CString NewFolderNaneorFileName);图 2-10第4步:按F7或点击工典栏上的Bui魁I按钮,生成dll。如果点击!会出现如图图2-4所示对话框.直接点击"Cancel"按钮取消即可。图 2-11浏览本匸程文件夹卜的Debug文件夹,可以看到生成的Builddll.dll文件和Builddll.lib文件。2.2.2.测试和使用DLL第1步:另外新建一个名字为InitlnidllTest的工程,添加相应的界面(本教程省略)。将刚才生成的 Builddll.dll文件、Builddll.lib文件及头文件Builddll.h拷贝到当前工程文件夹F,然后使用快 捷键*Alt+F7”,打开 Project Settings 的 Link 选项页,在 Object/library
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中西医结合医院建设项目可行性研究报告
- 工程器械保管课件
- 中药智能化提取生产线建设项目可行性研究报告
- 中药丸剂现代化生产线可行性研究报告
- 观潮小学语文课件
- 健康管理师考试营养与食品化学标准专项训练题库及答案
- 消防安全技术实务冲刺练习及答案
- 药士考试药学基础知识高频考点题库及答案
- 工程动画模板课件
- 航空器液压系统维修技能模拟试题及答案
- VDA6.3 过程审核-2-全套内容含审核计划、审核纪录-2026
- 创伤后骨髓炎防控与诊疗专家共识
- 中国新生儿复苏指南2026修订版中文版完整原文加详细解读
- 洁净车间工程工程量清单计价规范
- 2026年西昌网格员考试题及答案
- 肩关节活动度限制的康复策略
- 2026年山东省职业病诊断医师资格考试(职业性皮肤病等其他职业病)练习题及答案
- 抽纸厂人员岗位责任制度
- GB/T 47260.6-2026钢轨扣件系统试验方法第6部分:耐恶劣环境条件试验方法
- 2026年高校纪检审计岗位高频面试题包含详细解答
- 2025-2026学年广东深圳部分高中联考高一(上)期末语文试题含答案
评论
0/150
提交评论