同样的代码为何在delphi7编译运行正常~而在Xe2会出错呢?该如何解决

同样的代码为何在delphi7编译运行正常~而在Xe2会出错呢?
代码如下:

unit UnitUtil;

interface
uses
  System.SysUtils, System.Classes, Winapi.Windows;

function HexToString(S:string):string;
function HexScan(t:tstream; s:string):integer;
function HexRead(t:tstream; s:DWORD; b:Byte):Integer;

function ReadAddress(FlagCode:string;MyFile:TFileStream;Offset:Integer):string;
function ReadOffsetAdress(FlagCode:string;MyFile:TFileStream;Offset:Integer;const nSize:Integer=4):string;
function ReadCallAddress(FlagCode:string;MyFile:TFileStream;Offset,Modify:Integer):string;

implementation

function HexToString(S: string): string;//转十六进制字符串
var
  i: integer;
  tmpstr:string;
Begin
  Result := '';
  for i := 1 to Length(S) do
  begin
    if ((i mod 2)=1) then
    begin
      tmpstr:=Copy(S, i, 2);
      if tmpstr='**' then
        Result:=Result+'*'
      else
        Result:=Result + Chr(StrToInt('0x' + Copy(S, i, 2)));
    end;
  end;
end;

function HexScan(t:tstream; s:string):integer;  //找地址所在位置
var
  i, j: integer;
  p: pchar;

begin
  Result:=-1;
  getmem(p, t.size);                  // ---- 分配内存
  t.readbuffer(p^, t.size );        // ---- 读
  for i:=0 to t.size -1 do
  begin
    for j:=1 to length(s) do
    begin
      if s[j]='*' then                    //匹配通配符'*',强制下一轮循环
        Continue;

      if p[i+j]<>s[j] then             // ---- 有一个不同即退出
      begin
        break;
      end;
    end;
    if j>length(s) then               // ---- 依据
    begin
      Result:=i+1;
      break;
    end;
  end;
  freemem(p);
  t.seek(0, soBeginning);      // ---- 返回文件头
end;

function HexRead(t:tstream; s:DWORD; b:Byte):Integer;//读地址所在位置
var
  d: DWORD;

begin
  t.seek(s, soBeginning);       // ---- 到Length位置;
  t.Read(d, b);                 // ---- 读b字节
  Result:=d;
  t.seek(0, soBeginning);       // ---- 返回文件头
end;

function ReadAddress(FlagCode:string;MyFile:TFileStream;Offset:Integer):string;
var
  Addr:Integer;
begin
  Addr := HexScan(MyFile, HexToString(FlagCode));
  if Addr = -1 then
    Result := 'Null'
  else
    Result :='$' + IntToHex($400000 + Addr + Offset, 1);
end;

function ReadOffsetAdress(FlagCode:string;MyFile:TFileStream;Offset:Integer;const nSize:Integer=4):string;
var
  Addr:Integer;
begin
  Addr:=HexScan(MyFile,HexToString(FlagCode));
  if Addr=-1 then
    Result:='Null'
  else
    Result:='$'+ IntToHex(HexRead(MyFile, Addr + Offset, nSize),1)
end;

function ReadCallAddress(FlagCode:string;MyFile:TFileStream;Offset,Modify:Integer):string;
var
  Addr:Integer;
begin
  Addr:=HexScan(MyFile,HexToString(FlagCode));
  if Addr=-1 then
    Result:='Null'
  else
    Result := '$' + IntToHex(($400000 + Addr) + HexRead(MyFile, Addr+Offset, 4) + Modify, 1)
end;

end.


unit UnitMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, UnitUtil;

type
  TMainForm = class(TForm)
    edt_Path: TEdit;