Проблема с оператором «in» в Delphi

Привет, ребята, у меня странная проблема, и я не знаю, где я делаю не так ...

У меня есть следующий код, посмотрите, пожалуйста, его конец, где он не работает, я прокомментировал его. ..

var
  IDH:PImageDosHeader;
  INH:PImageNtHeaders;
  ISH:PImageSectionHeader;
  buf:Pointer;
  FS:TFileStream;
  ep,tmp1,tmp2:DWORD;
  i:Word;
begin
  if OpenDialog1.Execute then
    begin
        FS:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead or fmShareDenyNone);
        GetMem(buf,FS.size);
        FS.Read(buf^,FS.Size);
        FS.Free;
        IDH:=PImageDosHeader(buf);
        INH:=PImageNtHeaders(DWORD(buf) + DWORD(IDH^._lfanew));
        ep:=INH^.OptionalHeader.AddressOfEntryPoint;
        for i:=0 to INH^.FileHeader.NumberOfSections - 1 do
        begin
          ISH:=PimageSectionHeader(DWORD(INH) + sizeof(TImageNtHeaders) + i * sizeof(TImageSectionHeader));
          tmp1:=ISH^.VirtualAddress;
          tmp2:=ISH^.VirtualAddress + ISH^.Misc.VirtualSize;
          ShowMessageFmt('%d -> %d .. %d',[ep,tmp1,tmp2]);
          if ep in [tmp1..tmp2] then ShowMessage('Got it'); //This fails even if ep is in the defined interval. Why?
        end;
    end;
end;

Конечно, я могу заменить эту строку на

if (ep>=tmp1) and (ep<=tmp2) 

, но я хочу знать, что я делаю неправильно.

6
задан Kromster says support Monica 22 August 2011 в 13:16
поделиться