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来保证资源的释放呢?
还有一个问题:有没有用这段代码发现有时取不出版本号的?我曾经发现过几次,但不是一
定取不出,有时好有时坏。
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来保证资源的释放呢?
还有一个问题:有没有用这段代码发现有时取不出版本号的?我曾经发现过几次,但不是一
定取不出,有时好有时坏。