代码之家  ›  专栏  ›  技术社区  ›  MaQleod

InnoSetup&Pascal-即使在成功编译后运行时也会出现类型不匹配错误

  •  0
  • MaQleod  · 技术社区  · 16 年前

    [Setup]
    DefaultDirName={code:AppDir}\MyApp
    
    [Code]
    function AppDir(Param: String): String;
    var
     Check: Integer;
    begin
     Check := GetWindowsVersion();
     if Check = 6.0 then
     Result := ExpandConstant('{userdocs}')
     else
     Result := ExpandConstant('{pf}');
    end;
    
    1 回复  |  直到 16 年前
        1
  •  2
  •   mghie    16 年前

    从Inno安装文档中引用 GetWindowsVersion()

    返回压缩为单个整数的Windows版本号。高8位指定主版本;以下8位指定次要版本;较低的16位指定内部版本号。例如,在Windows 2000(版本5.0.2195)上,此函数将返回$05000893。

    无法与浮点值进行比较,需要提取版本号的部分,如下所示:

    function AppDir(Param: String): String;
    var
      Ver: Cardinal;
      VerMajor, VerMinor, BuildNum: Cardinal;
    begin
      Ver := GetWindowsVersion();
      VerMajor := Ver shr 24;
      VerMinor := (Ver shr 16) and $FF;
      BuildNum := Ver and $FFFF;
    
      if VerMajor >= 6 then
        Result := ExpandConstant('{userdocs}')
      else
        Result := ExpandConstant('{pf}');
    end;
    

    VerMajor 对于相等,因为这对于较低或较高的Windows版本都将失败。始终使用 <= >= 相反

    推荐文章