EOutOfMemory.CreateRes(@s)和EOutOfMemory.Create(s)有什么区别?(100分)

  • 主题发起人 主题发起人 chcw
  • 开始时间 开始时间
C

chcw

Unregistered / Unconfirmed
GUEST, unregistred user!
定义字符串资源如下:
resourcestring
s = 'Cannot allocate memory';

在使用时,用
EOutOfMemory.CreateRes(@s);
或者
EOutOfMemory.Create(s);
在编译时都不会出错,请问这两种用法有什么不同?
 
delphi中对于resourcestring的声明编译成资源字符串
对应于
TResStringRec = packed record
Module: ^Cardinal;
Identifier: Integer;
end;


EOutOfMemory.CreateRes(@s)
调用
constructor Exception.CreateRes(ResStringRec: PResStringRec);
begin
FMessage := LoadResString(ResStringRec);
end;

即根据相应的资源标识符载入资源字符串
 
我问的是
EOutOfMemory.CreateRes(@s);

EOutOfMemory.Create(s);
有什么不同?
 
EOutOfMemory.CreateRes(@s);跟本就是错误的用法,CreateRes()要求的参数是
资源Ident,你却将s的地址传给了他,因为类型一样所以编译器不会报错.

EOutOfMemory.Create(s);引发一个OutOfMemory错误,错误信息为s.
EOutOfMemory.CreateRes(@s);引发一个OutOfMemory错误,错误信息为资源Ident与s的
地址相等的字符串,如果没有信息为empty string.
 

Similar threads

回复
0
查看
848
不得闲
回复
0
查看
1K
不得闲
S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
后退
顶部