Qt创建DLL与exe交互_第1页
Qt创建DLL与exe交互_第2页
Qt创建DLL与exe交互_第3页
Qt创建DLL与exe交互_第4页
Qt创建DLL与exe交互_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Qt创建DLL与Exe交互这俩天研究下qt下Dll。%KievProjectChooseatappL&le:Qt匚卄FrojectDtkerTfojecPro4心丈r&niV*i-si:-tlCarstrolZustonQNLEtaasion.PLueiriEnyptyQtProj-aciIrriportEkistmgProject右C44litrorFL.sdoapeke.ThisctlBea:ed.tocreate:gsltufadC44liforueqvlihQPlijqillL口ElcLei:gd.t-iJiLiine(plugir!=)耳話hixidnr5io.-l.icC44lib

2、raryfaruswithanothefprojecta.1liriktLn首先我们创建一个库的工程。选择OtherProject-C+LibraryNext后进入选择库类型界面,默认是“抄辽話”。在红色区域更改项目名称。下个界面选择编译器,直接Next默认选择的是QtCore,如果你的Dll有图形界面,则需要QtGui,需要访问数据库QtSql,依次类推。当然,创建通用的库,就不需要选择了。下个界面直接Next,这样工程就创建成功了。但是个人建议吧这里默认生成的头文件更改一下。然后再加一个同名的cpp改后头文件増加cpp文件在编写之前我们应该看以下.pro文件以确认我们的工程是否正确ITiL

3、R&ETUBermanagerTEMPIJkTE=Lib(DESTDIR./test-build-desktop/debug/DEF工HE日斗=USERHAKSER工工ERAjT亍SOURCES十=usermazia_ger.cppluserglobal-cppHEADERS+=hlusergloba.1-h绿色区域:提供的是项目名称也是Dll生成后的名字。蓝色区域:说明了生成的是库文件,而非.Exe文件红色区域:给定了库生成的目录。灰色区域:给定了外部宏定义,这里定义的是库德宏紫色区域:是库的依赖文件。首先我们应该编写对外接口。即luserglobal.h#lfzidefZUSERG1OEA

4、i_H#defIneIUSERG1OEAi_H#inc.lude#ifdefined(USERMANAGERIBRARY)defineUSERHANAGERSH2kJLED_EXPORTQ_DECL_EXPtRTelsedeEineUSERMaNA(5ERSIiaJLED_EXFORTQ_DECL_IMPORT”复制出来因为我我们会看到这样几句,不要管他把“们,写库函数需要用到。然后,我们该写我们的接口了。写接口的时候要按照“复用”,“需求”,“封装”3个特性进行封装接口。复用:指的是你写的接口不是针对某一个工程,而是针对某一类功能而进行封装。需求:写出来的接口必须能够满足,使用DLL的需求,

5、提供的功能要少,但是要全。封装:这个封装并不是Dll自带的封装特性,而是在写接口的时候要注意,不要把Dll里的成员提供出去。而只是提供对应功能。(这里说一下,提供一个成员,还不如写一个类来的方便,做DLl的意义就没有了。)好了开始写我们的接口吧。第一,我们要确认,对DLL的需求。是否可以操作,DLL是否需要通知给调用者。第二,我们要确认,我们的DLL属于的类型,比如界面DLL,功能DLL等等。第三,我们的DLL,有几个默认的库函数。(建议越少越好)就啰嗦到这里了。开始吧。我的DLL功能显示一个界面所以我给预留的操作接口是(下图)14HclassIUserControl151Cpublic;17

6、virtualvoidBhowWindow()=0;ievj.irtua.1toidcloseWj-iudow()=0;19Tirtua.1voidhideWindow()=0;20CT_本着见名知意的原则,要是看不懂就别继续看了。然后需要用我的DLL通知调用者,我的处理状态,所以需要创建一个通告接口。方法同上。这样我们的接口预留的就可以了。(对于我的程序足够了)在这里需要说一下,接口是根据的你的程序需求而定,并非统一规格。做完这些,我们就可以,把一个简单库函数添加进来了Elextern81C11rJnERMANAGERSFr_ESPORTTUcrCorFt-qIr-.Vsrt-+y*rKr.

7、k:+vlib;根据格式,返回操作接口,接受通告接口。把对应的功能写到对应的文件内,如果功能多,可是适量添加文件。这里我实现了一个Dialog,并让继承了操作接口,方便调用DLL者操作。在库头文件,对应的Cpp中实现库接口函数。12345#inc丄uc!eInserglobal.h#ineludeusermajiager_hIUserControl*GreateUser(lUserNotify*pNotifQWidget*p)Userznna.gex*斤皿newUsermana.ger(p);1Q91011pNntify-children(IU3erNotify:OVEZR);Treturn(

8、ITJseirControl1in;以上内容是基础框架,按照这个框架写,写出来的就是好DLL。好了DLL完成了。我们在写个测试程序吧。-啦tE弓ttest,pru一HeadersFIuserglobal,h-L.|dialog,hSrnrrcPEIdi:=Lli!ig.epp11rn=iri.epp包涵DLL的头文件。然后再.pro中添加IjIBS+=./debug/tLSeirmajia.g已r-dl丄指定号库路径D8810111213141516171819202122#endi/DHfiiOGHJtlfndefDIA1OG_JLtdeizie4tinclude#includelaserjlobal.h.eclassD-lalcg:publicQI?La.log,publicZUserNotifyQ_OBkTCTpublzLC:Dia.logwidgetparen.t=0);voidchildren(intw);Dialog();publicslots:toidsh.owMyWj_ndow();private:QWidget*ri_Widget;;。h文件内容继承通告接口接受通告信息12|345H78|9io|1112L31

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论