DELPHI 2010 动态链接库DLL断点调试.doc_第1页
DELPHI 2010 动态链接库DLL断点调试.doc_第2页
DELPHI 2010 动态链接库DLL断点调试.doc_第3页
DELPHI 2010 动态链接库DLL断点调试.doc_第4页
DELPHI 2010 动态链接库DLL断点调试.doc_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论