DELPHI 7 动态链接库DLL断点调试
来源:互联网 发布:淘宝能刷心悦会员 编辑:程序博客网 时间:2024/06/05 16:46
DELPHI 7动态链接库DLL断点调试
马根峰
(广东联合电子服务股份有限公司,广州 510300)
作者博客:
CSDN博客:http://blog.csdn.net/magenfeng
新浪博客: http://blog.sina.com.cn/magenfeng
QQ空间: http://user.qzone.qq.com/630414817
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、2007和 2010这三个版本中的DLL断点调试技术。
本篇文章来详细地介绍 Delphi 7中的动态链接库DLL断点调试技术。
2 DELPHI 7的DLL断点设置与DLL调试
在DELPHI 7.0以及以前的版本中,动态链接库的调试方法如下:
点击菜单Run-->Parameters.打开Run Parameters窗口,如图1所示。
图1 点击菜单Run-->Parameters.打开Run Parameters窗口
在Run Parameters窗口中,在Host Application中填入宿主程序的完整路径然后选择,如图2所示。
图2 在Run Parameters窗口中,点击Browse选中宿主程序G:\Delphi_Dll_Debug\70\Magenf_Master\Delphi2007_Dll_Debug.exe
设置断点后,输入F9或者点击Run-->Run来运行宿主程序Delphi2007_Dll_Debug.exe,如图3所示
图3 设置断点后,输入F9或者点击Run-->Run来运行宿主程序Delphi2007_Dll_Debug.exe
在主程序Delphi2007_Dll_Debug.exe窗口对应的文本框中,输入 1和2后,然后点击按钮“=”,即进入DLL的断点调试,如图4所示。
图4 进入DLL的断点调试
3 例子中的宿主程序及DLL程序代码
-------宿主程序代码-----
unit UDllDebug;
interface
uses
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 hinst>0 then
begin
FDll_Add:=getprocaddress(hinst,pchar('Dll_Add'));
if FDll_Add<>nil 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 library's USES clause AND your project's (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 *.RES}
function Dll_Add(int_1,int_2:integer):integer;stdcall;
var
intSum:integer;
begin
intSum:=int_1+int_2;
result:=intSum;
end;
exports
Dll_Add;
end.
-------DLL程序代码-----
- DELPHI 7 动态链接库DLL断点调试
- DELPHI 2007 动态链接库DLL断点调试
- DELPHI 2010 动态链接库DLL断点调试
- delphi DLL动态链接库
- 调试动态链接库(DLL)
- 调试动态链接库(DLL)
- delphi创建DLL动态链接库 [转贴]
- Delphi 制作 .dll 动态链接库
- delphi创建DLL动态链接库
- 如何调试DLL动态链接库
- VS2010调试dll动态链接库
- Delphi中动态链接库(DLL)的建立和使用
- Delphi中动态链接库(DLL)的建立和使用
- Delphi中动态链接库(DLL)的建立和使用
- delphi中动态链接库dll的使用(转载)
- Delphi中动态链接库(DLL)的建立和使用
- Delphi中动态链接库(DLL)的建立和使用
- Delphi中动态链接库(DLL)的建立和使用
- wince系统实时性问题
- Java实现前台页面中的随机码
- PL/SQL的存储过程和函数
- P2P之UDP穿透NAT的原理与实现--增强篇(附源代码)
- 图解DB2 Express-C 9.5在Windows下的安装
- DELPHI 7 动态链接库DLL断点调试
- c++ template 类模板特化
- XML Schema nillable=”true” vs minOccurs=”0″
- android tabhost去掉底部白线
- java内存溢出分析工具
- 日志框架备忘
- 获取客户端真实ip地址
- 国内HTML5前端开发框架汇总
- sphinx实时索引架构现实 sphinx-server-config