在Delphi中,“ReturnAddress”是什么意思?

浏览System.Zip(Delphi XE2)看看它是如何工作的,我发现这个功能
procedure VerifyWrite(Stream: TStream; var Buffer; Count: Integer);
begin
  if Stream.Write(Buffer,Count) <> Count then
    raise EZipException.CreateRes(@SZipErrorWrite) at ReturnAddress;
end;

这是在ReturnAddress部分,令我难以置信。

我不知道那是一个有效的关键字(语法荧光笔似乎也不认识它)。

根据IDE,它被声明为System.ReturnAddress,但是我只能在程序_HandleAnyException的(asm)代码中找到它被声明为一个标签。系统单元充满了对它的引用。

所以我想知道的是这样的:

什么是ReturnAddress?
>什么是提升Exception.Create …在ReturnAddress?

奖励积分,如果你能给出一个真实世界的例子,说明这将是一个有用的结构,或者你可以建议不要使用它。

解决方法

ReturnAddress是VerifyWrite在完成时返回的地址。

提升异常。在ReturnAddress中创建…意味着当显示异常对话框时,它会将异常的地址指示为ReturnAddress。换句话说,异常消息将读取Exception< whatever>在< ReturnAddress&gt ;:<异常消息&gt ;. 这是Delphi 7的帮助文件的摘录。它几乎和the online version相同。

To raise an exception object,use an instance of the exception
class with a raise statement. For example,

06000

In general,the form of a raise statement is

06001

where object and at address are both optional; see
Re-raising exceptions. When an address is specified,
it can be any expression that evaluates to a pointer
type,but is usually a pointer to a procedure or function.
For example:

06002

Use this option to raise the exception from an earlier point
in the stack than the one where the error actually occurred.

注意最后一句话。关于使用< address&gt

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...