关于取文件版本号那段常见代码的一个疑问!难道大家都没注意到?(0分)

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

coolqiang

Unregistered / Unconfirmed
GUEST, unregistred user!
这段代码如下:
function GetFileVersion(fn: string; var ma, mi, r ,b: integer):boolean;
var
; buf, p: pChar;
; sver: ^VS_FIXEDFILEINFO ;
; i: LongWord;
begin
; i:= GetFileVersionInfoSize(pchar(fn), i);
; new(sver);
; p:= pchar(sver);
; GetMem(buf, i);
; ZeroMemory(buf, i);
; result:= false;
; if GetFileVersionInfo(pchar(fn), 0, 4096, pointer(buf)) then
; ; if VerQueryValue(buf, '/', pointer(sver), i) then begin
; ; ; ma:= sVer^.dwFileVersionMS shr 16;
; ; ; mi:= sver^.dwFileVersionMS and $0000ffff;
; ; ; r:= sver^.dwFileVersionLS shr 16;
; ; ; b:= sver^.dwFileVersionLS and $0000ffff;
; ; ; [red]result:= true;[/red]
; ; end;
; Dispose(p);
; FreeMem(buf);
end;

疑问是:红色那行后程序已经返回了,后面进行资源释放的代码能执行吗?虽然不影响功能
,但至少代码不够严谨吧!我在这里搜索出的关于取版本号的帖子基本上都用上面这段代码
,难道没人看出这个问题吗?是否应该用try...finally...end来保证资源的释放呢?
还有一个问题:有没有用这段代码发现有时取不出版本号的?我曾经发现过几次,但不是一
定取不出,有时好有时坏。
 
>>疑问是:红色那行后程序已经返回了

红色那行后函数并没有返回啊!
你这里返回是什么意思??
([:)]难道你是C程序员)
 
yxyyyy说得对,Result不是C中的Return
可以将result看成与返回值类型相同得一个变量,给变量赋值自然不会退出函数,要退出
函数使用Exit或正常退出,例如上面得这个程序
 
不好意思,是我弄错了!
刚才试了一下,发现确实没有返回。我那样说是因为有一次调试程序的时候好像发现Result
后就退出函数了,看来这样说是不对的,要实际试过才知道。
呵呵,本人才疏学浅,见笑了!:)
 
接受答案了.
 
后退
顶部