




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DELPHI 2010 动态链接库DLL断点调试马根峰 ( 广东联合电子服务股份有限公司, 广州 510300)摘要:本文详细介绍了Delphi 2010中的动态链接库DLL断点调试技术关键词: DELPHI 2010;Dll断点调试;1 Delphi 几个经典版本简介 Delphi从1995年的 1.0版本,发展到现在的最新的XE3版本,历经N多版本,但最为经典的几个版本个人觉得应属 7.0、2007和 2010。Delphi 7.0应该是Delphi用户最多的版本。Delphi 2007是功能就不多说了,归根结底一句话,它是 AnsiString的最后一个版本,在Delphi 2007中,string类型映射为 AnsiString ,char类型映射为 AnsiChar,Pchar类型映射为 PAnsiChar。所以DELPHI低版本的程序可以较轻松地迁移到DELPHI 2007版本。Delphi 2007也是Delphi程序员很容易上手的晚期版本。从Delphi2009开始起,到现在的Delphi XE3为止,都是 unicode 版本。String 类型映射为 UnicodeString 而不是 AnsiString ,Char 类型映射为 WideChar,PChar 类型映射为 PWideChar。 由于Delphi 7.0、2007和 2010在界面上乃至功能上的一些变化,所以在动态链接库DLL断点调试上,有较大的变化。在今后几天的时间中,笔者会以三篇文章来分别详细地介绍Delphi 7.0、2007和 2010这三个版本中的DLL断点调试技术。本篇文章来详细地介绍 Delphi 2010中的动态链接库DLL断点调试技术。2 DELPHI 2010的DLL断点设置与DLL调试在DELPHI 7.0以及以前的版本中,动态链接库的调试方法如下:点击菜单Run-Parameters.打开Run Parameters窗口,如图1所示。 图1 点击菜单Run-Parameters.打开Run Parameters窗口设置图中断点,然后点击F9或者RunRun来运行宿主程序Delphi2007_Dll_Debug.exe,但发现断点无效,如图2所示:图2 设置断点后,运行宿主程序 Delphi2007_Dll_Debug.exe,断点无效 点击Project-Options.,在Project Options窗口中,在Delphi CompilerCompiling属性页中将Debug information设置为True,如图3所示:图3 在Delphi CompilerCompiling属性页中将Debug information设置为True点击Project-Options.,在Project Options窗口中,在Delphi CompilerLinking属性页中将Debug information和Include remote debug symbols两项设置为True,如图4所示:图4 将Debug information和Include remote debug symbols两项设置为True运行宿主程序Delphi2007_Dll_Debug.exe,断点还是无效,如图5所示:图5 运行宿主程序 Delphi2007_Dll_Debug.exe,发现断点还是无效切换到Delphi的DLL工程文件上,点击ctrl+alt+M,跳出一个名叫Modules的窗体来。左上角显示了宿主程序本身及其它所调用的资源。找到动态链接库 Magenf_Detail.dll项,发现目录没有指向当前DLL所在的目录。点击鼠标右键,选中菜单项“Reload Symbol Table”如图6所示:图6 打开Modules属性页,找到Magenf_Detail.dll项,点击鼠标右键,Reload Symbol Table重新设置动态链接库Magenf_Detail.dll 的位置,选中当前DLL工程Magenf_Detail所在目录的动态链接库Magenf_Detail.dll文件,如图7所示:图7 打开Modules属性页,找到Magenf_Detail.dll项,点击鼠标右键,Reload Symbol Table,重新设置它的位置 然后切换到Delphi的属性页Magenf_Detail,发现断点生效,如图8所示:图8 点击属性页Magenf_Detail,发现断点生效在Delphi2007_Dll_Debug.exe,输入 1和2 后点击铵钮“=”,如图9所示:图9 在Delphi2007_Dll_Debug.exe,输入 1和2 后点击铵钮“=” 进入DLL断点调试,如图10所示:图10 进入DLL的断点调试3 例子中的宿主程序及DLL程序代码-宿主程序代码-unit UDllDebug;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons, Contnrs , ActiveX, StrUtils ;type TDll_Add=function(int_1,int_2:integer):integer;stdcall; TfrmDllDebug = class(TForm) Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Edit3: TEdit; BtnAdd: TButton; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure BtnAddClick(Sender: TObject); private Private declarations public Public declarations HInst:Thandle; FDll_Add:TFarProc; functionDll_Add:TDll_Add; /aForeThread:MuliThread; end;var frmDllDebug: TfrmDllDebug;implementation $R *.dfm procedure TfrmDllDebug.FormCreate(Sender: TObject);begin hinst:=loadlibrary(Magenf_Detail.dll); if hinst0 then begin FDll_Add:=getprocaddress(hinst,pchar(Dll_Add); if FDll_Addnil then functionDll_Add:=TDll_Add(FDll_Add) else messagedlg(Fatal error! Function not be found!,mtWarning, mbYes, 0) ; end else messagedlg(Fatal error! Magenf_Detail.dll not be found!,mtWarning, mbYes, 0) ;end;procedure TfrmDllDebug.FormClose(Sender: TObject; var Action: TCloseAction);begin try freelibrary(hinst); except end;end; procedure TfrmDllDebug.BtnAddClick(Sender: TObject);var int1,int2,int_return:integer;begin int1:=strToInt(edit1.Text); int2:=strToInt(edit2.Text); int_return:=functionDll_Add(int1,int2); edit3.Text :=intToStr(int_return);end;end.-宿主程序代码-DLL程序代码-library Magenf_Detail; Important note about DLL memory management: ShareMem must be the first unit in your librarys USES clause AND your projects (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL-even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. uses SysUtils,Classes;$R *.RESfunction Dll_Add(int_1,int_2:integer):integer;stdcall;var intS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年金融租赁服务项目建议书
- 2025年半导体用石英玻璃材料项目发展计划
- 2025年钢增强塑料复合管项目发展计划
- 2025年特种机载装置合作协议书
- 性别差异下的教育心理学如何针对不同性别激发学生潜力
- 教育投资的新趋势游戏化学习平台的融资路径
- 教育政策成效评估的多维度分析
- 未来科技趋势下的教育技术增强现实与虚拟现实的融合应用研究
- 2025年甘肃省靖远县四中物理高一第二学期期末质量跟踪监视试题含解析
- 幼儿教育中教师心理调适的技巧与方法
- PCR实验室(新冠核酸检测实验室)SOP文件 (一)
- 医院电力系统改造技术标书范本
- 委托代办购买水果合同范例
- 2024至2030年轻钢隔墙龙骨项目投资价值分析报告
- 养老院防恐防暴应急预案
- 旧房加装电梯基础施工方案
- 2024年中国冲击波医疗器械市场调查研究报告
- 小学英语时态练习大全(附答案)-小学英语时态专项训练及答案
- 新课标高一英语阅读理解60篇
- DB15-T 3585-2024 高标准农田施工质量评定规程
- 2024年新人教版七年级数学下册期末考试数学试卷-含答案
评论
0/150
提交评论