FreeMem(VerInfo, VerInfoSize);删除试验一下看看!我没有仔细看!大致扫一眼,估计可能这个位置.

解决方案 »

  1.   

    我试了一下,可以呀!我试的代码如下:中断一下可以呀!
    procedure TForm1.Button3Click(Sender: TObject);
    var
      NewVers,OldVers:TSimpleVersion;
    begin
       FillChar(NewVers,SizeOf(TSimpleVersion),0);
       NewVers := GetBuildInfo(Application.ExeName);
       FillChar(OldVers,SizeOf(TSimpleVersion),0);
       OldVers := GetBuildInfo(Application.ExeName);
       ShowYOurVer(@NewVers);
       ShowYOurVer(@OldVers);
    end;function TForm1.ShowYourVer(p: Pointer): Boolean;
    var
      pVers:PSimpleVersion;
    begin
      pVers := PSimpleVersion(p);
      ShowMessage(IntToStr(pVers.dwProductVersionMS));
    end;
      

  2.   

    哦!对了!应该设置一个变量tmpversion:TSimpleVersion;
    里面
        Result.dwProductVersionMS := dwFileVersionMS;
        Result.dwProductVersionLS := dwFileVersionLS;
    修改为
        tmpversion:=TSimpleVersion.create;
        tmpversion.dwProductVersionMS := dwFileVersionMS;
        tmpversion.dwProductVersionLS := dwFileVersionLS;
        result:=tmpversion;
    应该没问题了.
      

  3.   

    因为没有生成内存空间,所以第一个结束后,那个对应的内存可能被free 掉了!你的那种result赋值方式也危险.因为result本身还没有分配内存空间,只能赋值,可是 你却对它的一个域赋值.