为什么我取不了程序的版本号???(100分)

  • 主题发起人 主题发起人 honestman
  • 开始时间 开始时间
H

honestman

Unregistered / Unconfirmed
GUEST, unregistred user!
程序如下:
// fn 是文件名称和路径
// ma,mi,r,b 是版本号
// 如 1.0.3.20 那么 ma=1,mi=0,r=3,b=20
function TmainForm.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;
result:= true;
end;
Dispose(p);
FreeMem(buf);
end;

procedure TmainForm.FormCreate(Sender: TObject);
var
ma, mi, r ,b: integer;
begin
l_title.Caption:='XXXXXX信息管理系统';
mainform.Caption:=l_title.Caption;
getfileversion(Application.ExeName,ma,mi,r,b);
l_ver.Caption:='Ver '+inttostr(ma)+'.'+inttostr(mi)+'.'+inttostr(r)+'.'+inttostr(b);
end;

开始的时候,运行时版本显示是正常的。但是不知道为什么在某次编译后,运行时版本显示变成
“0.0.0.0”了,而在Delphi源代码Project->Options...中的版本号一直都是正常的。

为什么???
而且那次编译并没有修改这方面的代码啊!
 
呵呵,我用D6,拷贝了Delphi帮助的程序段,什么都看不到,比你还惨的。
 
你一开始就失败没有什么好说的。
但是,我开始的时候是可以的,只是从某次编译后就读不出版本号了。
 
你看一下工程的语言属性有没有被改变了

--》if GetFileVersionInfo(pchar(fn), 0, 4096, pointer(buf)) then
如果语言代码不是4096,改回来即可!
 
“工程的语言属性”在哪里查啊?
 
就是工程属性里边version页的langue属性,要注意4096与之有对应关系,具体查一下msdn
 
那个地方我选的是:中文(中国);Locale ID: $0804。
我应该怎么改程序啊?
 
看我的:
var
VerInfoSize,VerValueSize,Dummy:Dword;
VerInfo:Pointer;
VerValue:PVSFixedFileInfo;
sVer:String;V1,V2,V3,V4:word;
begin
VerInfoSize:=GetFileVersionInfoSize(Pchar(ParamStr(0)),Dummy);
GetMem(VerInfo,VerInfoSize);
GetFileVersionInfo(PChar(ParamStr(0)),0,VerInfoSize,VerInfo);
VerQueryValue(VerInfo,'/',Pointer(VerValue),VerValueSize);
With VerValue^ do
begin
V1:=dwFileVersionMS shr 16;
V2:=dwFileVersionMS and $FFFF;
V3:=dwFileVersionLS shr 16;
V4:=dwFileVersionLS and $FFFF;
end;
FreeMem(VerInfo,VerInfoSize);
sVer:=IntToStr(V1) + '.' + IntToStr(V2)+ IntToStr(V3)+ IntToStr(V4);
Form1.Caption:=Form1.Caption + ' - Ver:' + sVer;
end;
 
接受答案了.
 
后退
顶部