gpt4 book ai didi

delphi - "in"即使在定义的时间间隔内运算符也会失败

转载 作者:行者123 更新时间:2023-12-03 14:57:41 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,我不知道我哪里做错了。

我有以下代码。请看它的结尾,这就是它失败的地方,我评论了它:

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) 

但我想知道我做错了什么。

最佳答案

集合是相同类型的值的集合。该类型必须是有序的,并且该类型的变量最多有 256 个可能的值。 ( Official documentation ) 因此,集合不能包含整数,因为可能的整数超过 256 个。

您可以使用InRange函数:

if InRange(ep, tmp1, tmp2) then

(使用数学)。

关于delphi - "in"即使在定义的时间间隔内运算符也会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7147793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com