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程序代码-----



转载于:https://www.cnblogs.com/wuyida/archive/2013/02/26/6300782.html

DELPHI 7 动态链接库DLL断点调试相关推荐

  1. 采用Reflector的VS.net插件断点调试无源码DLL 分类:

    .Net的编程利器Reflector可以反编译基于.net开发的应用程序和DLL,其功能强大不用多说.今天想试验一把利用VS.net的插件断点调试外部无源码的DLL(只要是程序集都可以,所以exe也行 ...

  2. 【Unity】DnSpy断点调试Unity已发行游戏的dll

    前言 DnSpy是本人一直在用的反编译软件,很好用,今天闲来无事的时候用DnSpy的调试功能断点调试了一下Unity的游戏[发行版],很好用,于是想着要分享给大家. 前期准备 DnSpy下载 Unit ...

  3. VC++动态链接库(DLL)编程(一)――理解库

    VC++动态链接库(DLL)编程(一) ――理解库 作者:宋宝华  e-mail:21cnbao@21cn.com 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概 ...

  4. VC++动态链接库(DLL)编程深入浅出(zz)

    1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了" ...

  5. [转]C++学习:VC++动态链接库(DLL)编程深入浅出(zz)

    转自:http://www.cnblogs.com/chio/archive/2007/11/03/948480.html 1.概论 先来阐述一下DLL(Dynamic Linkable Librar ...

  6. VC++动态链接库(DLL)编程深入浅出

    深度好文作为入门理解非常不错 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在 ...

  7. VC-基础:VC++动态链接库(DLL)编程深入浅出

    1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了" ...

  8. C++动态链接库(DLL)编程深入浅出(zz)

    1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了" ...

  9. php断点调试的几种方法

    断点调试是程序开发过程中的一个必不可少的步骤,一些程序的断点调试操作比较简单,只需在编辑器里标记哪行为断点,便可得知程序各个环节的输出结果,例如c#.VB.Delphi等语言. 但是对于PHP程序的调 ...

最新文章

  1. python网络开发框架_greenev首页、文档和下载 - Python网络服务框架 - OSCHINA - 中文开源技术交流社区...
  2. Web.config 灵活配置
  3. shell磁盘监控自动化处理
  4. 实践:创建异步 HTTP 处理器
  5. 网络七层协议 五层模型 TCP连接 HTTP连接 socket套接字
  6. 【链表】链表中环的入口结点
  7. pcie转sata3硬盘不启动_新品推荐:PCIe2.0转4口SATA3/6G扩展卡 SFF8087
  8. Unity 3D中的内存管理
  9. SIFT特征匹配及其实现
  10. 玩转Mixly – 1、Mixly图形化编程工具介绍
  11. 实战派网站优化运营总监白杨 分享从业十年的seo优化干货!
  12. [irving] C# Windows Beep 调用声音文件
  13. python提取某一列数据,Python numpy 提取矩阵的某一行或某一列的实例
  14. Android开发之自动更换壁纸
  15. 衡量软件交付性能的4个指标
  16. MySQL查询——为表和字段取别名
  17. java获取北京时间系统时间全球各地时间。
  18. css特效(使用伪元素生成随机颜色爱心)
  19. python画一个爱心
  20. 你应该知道的10种软件工具

热门文章

  1. python读取json配置文件_Python简单读取json文件功能示例
  2. 浏览器控制台执行代码_JavaScript 和 浏览器那些事
  3. JZOJ 5396. 【NOIP2017提高A组模拟10.6】Blocks
  4. ast抽象语法树_新抽象语法树(AST)给 PHP7 带来的变化
  5. php manager 怎么用,Windows 2008 R2下如何利用PHPManager对PHP进行配置
  6. pythonweb扫描器_Python安全工具之web目录扫描
  7. linkedblockingqueue使用_阿里规范要求不能使用Executors创建线程
  8. echarts柱状图显示百分比_Echarts 饼状图显示信息,内容,值,百分比都显示的代码 更改图例等问题汇总...
  9. word中如何隐藏表格线框
  10. ICCV 2017 《Multi-label Image Recognition by Recurrently Discovering Attentional Regions》论文笔记