線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1383
推到 Plurk!
推到 Facebook!

如何取得自寫bpl的版本資訊?

答題得分者是:Mickey
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-06 15:28:26 IP:211.21.xxx.xxx 未訂閱
在package專案裡的option設好版本資訊 請問我要如何用程式碼讀出來? 謝謝指導
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-06 15:55:45 IP:147.8.xxx.xxx 未訂閱
bpl is in fact dll. You should be able to extract the information from it as it is a dll/exe.
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-07 13:23:12 IP:218.32.xxx.xxx 未訂閱
pedro 你好:    先看看 Win API "GetFileVersionInfo", 不過看起來挺麻煩的.    在 Windows.pas 中已有相關宣告:
type
  PVSFixedFileInfo = ^TVSFixedFileInfo;
  {$EXTERNALSYM tagVS_FIXEDFILEINFO}
  tagVS_FIXEDFILEINFO = packed record
    dwSignature: DWORD;        { e.g. $feef04bd }
    dwStrucVersion: DWORD;     { e.g. $00000042 = "0.42" }
    dwFileVersionMS: DWORD;    { e.g. $00030075 = "3.75" }
    dwFileVersionLS: DWORD;    { e.g. $00000031 = "0.31" }
    dwProductVersionMS: DWORD; { e.g. $00030010 = "3.10" }
    dwProductVersionLS: DWORD; { e.g. $00000031 = "0.31" }
    dwFileFlagsMask: DWORD;    { = $3F for version "0.42" }
    dwFileFlags: DWORD;        { e.g. VFF_DEBUG | VFF_PRERELEASE }
    dwFileOS: DWORD;           { e.g. VOS_DOS_WINDOWS16 }
    dwFileType: DWORD;         { e.g. VFT_DRIVER }
    dwFileSubtype: DWORD;      { e.g. VFT2_DRV_KEYBOARD }
    dwFileDateMS: DWORD;       { e.g. 0 }
    dwFileDateLS: DWORD;       { e.g. 0 }
  end;
  TVSFixedFileInfo = tagVS_FIXEDFILEINFO;
  {$EXTERNALSYM VS_FIXEDFILEINFO}
  VS_FIXEDFILEINFO = tagVS_FIXEDFILEINFO;
參考看看.
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-07 13:55:02 IP:218.32.xxx.xxx 未訂閱
剛剛試了一下, 應該可直接引用了:    
function Versionstring(Ms, Ls: Longint): string;
begin
  Result := Format('%d.%d.%d.%d', [HIWord(Ms), LOWord(Ms), HIWord(Ls), LOWord(Ls)]);
end;    function GetFileVersion(FFileName:string):string;
var Size: Integer;
    Size1: LongWord;
    RezBuffer: string;
    Handle: DWord;
    FixedFileInfoBuf : PVSFixedFileInfo;
begin
  // Check Version Info Size
  Size := GetFileVersionInfoSize(PChar(FFileName), Handle);
  if Size <= 0 then
    raise Exception.Create('No Version Info Available.');
  // Fill Version Buffer
  SetLength(RezBuffer, Size);
  if not GetFileVersionInfo(PChar(FFileName), Handle, Size, PChar(RezBuffer)) then
    raise Exception.Create('Cannot obtain version info.');
  // Fill Fixed file info
  if VerQueryValue(PChar(RezBuffer), '\', pointer(FixedFileInfoBuf), Size1) then begin
     if Size1 < SizeOf(TVSFixedFileInfo) then
        raise Exception.Create('No fixed file info');
  end
  else
    raise Exception.Create('No fixed file info');
  // Extract Version string from Fixed File Info
  with FixedFileInfoBuf^ do
    Result := Versionstring(dwFileVersionMS, dwFileVersionLS);
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage(GetFileVersion('C:\Program Files\Borland\Delphi7\Bin\dbx70.bpl'));
end;
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-09 09:52:02 IP:210.61.xxx.xxx 未訂閱
Mickey前輩 謝謝您提供的解答, 可以了
系統時間:2024-06-26 7:18:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!