2011-04-19 90 views
6

我有一个应用程序使用DL​​L来生成fastReports文件。DLL文件版本

当我需要对报告数据结构进行更改时,我只更改此DLL并将其分发给APP的所有用户。我如何保证在开始之前都有最新版本?

如何从DLL文件生成/提取此信息。

回答

12

此功能将得到的文件版本为字符串:

function FileVersionGet(const sgFileName : string) : string; 
var infoSize: DWORD; 
var verBuf: pointer; 
var verSize: UINT; 
var wnd:  UINT; 
var FixedFileInfo : PVSFixedFileInfo; 
begin 
    infoSize := GetFileVersioninfoSize(PChar(sgFileName), wnd); 

    result := ''; 

    if infoSize <> 0 then 
    begin 
    GetMem(verBuf, infoSize); 
    try 
     if GetFileVersionInfo(PChar(sgFileName), wnd, infoSize, verBuf) then 
     begin 
     VerQueryValue(verBuf, '\', Pointer(FixedFileInfo), verSize); 

     result := IntToStr(FixedFileInfo.dwFileVersionMS div $10000) + '.' + 
        IntToStr(FixedFileInfo.dwFileVersionMS and $0FFFF) + '.' + 
        IntToStr(FixedFileInfo.dwFileVersionLS div $10000) + '.' + 
        IntToStr(FixedFileInfo.dwFileVersionLS and $0FFFF); 
     end; 
    finally 
     FreeMem(verBuf); 
    end; 
    end; 
end; 
+0

版本信息面板对.DLL项目禁用。我如何启用它来激活和设置版本信息? – DRokie 2011-04-21 11:11:26

+2

@ DRookie:将{$ R * .res}添加到dll的项目文件中。 – dummzeuch 2011-04-22 06:38:25

3

使用SysUtils.GetFileVersion()

获取文件版本需要提前设置文件版本

+0

版本信息应该被纳入下'项目/ Options' – kludg 2011-04-19 21:03:02

+0

版本信息面板项目是禁用的.DLL项目。我如何启用它来激活和设置版本信息? – DRokie 2011-04-21 11:11:07

0

JCL有JclFileVersion。两三行,你就完成了。

4

获取DLL版本:

function GetDllVersion: string; //Run in dll project 
var 
    fn: string; 
begin 
    fn := GetModuleName(HInstance); 
    Result := FileVersionGet(fn); // use Matthias's function 
end;