gpt4 book ai didi

delphi - Delphi 2010 中的 ASyncPro 5.00 - 范围检查错误

转载 作者:行者123 更新时间:2023-12-03 15:29:46 28 4
gpt4 key购买 nike

尝试让 AsyncPro 在 D2010 中运行。使用 Source Forge 的 5.00 版本。

下面的 AsyncPro 代码(在 OOMisc.pas 中)失败,并在下面的 MakeLong 行上出现范围检查错误。我不知道如何开始调试这个。

有人在 D2010 中运行 ASyncPro,或者对下面可能发生的情况有一些了解吗?我在 SourceForge 上发的帖子没有得到任何回复。

function SafeYield : LongInt;
{-Allow other processes a chance to run}
var
Msg : TMsg;
begin
SafeYield := 0;
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then begin
if Msg.Message = wm_Quit then
{Re-post quit message so main message loop will terminate}
PostQuitMessage(Msg.WParam)
else begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
{Return message so caller can act on message if necessary}
SafeYield := MAKELONG(Msg.Message, Msg.hwnd); // Range Check Error on this line!
end;
end;

TIA

最佳答案

看来您在编译代码时启用了范围检查:

{$R+}
function Test(A, B: LongWord): LongInt;
begin
Result:= MakeLong(A,B);
// Project .. raised exception class ERangeError with message 'Range check error'.
end;

您可以关闭范围检查以消除运行时错误,但结果

SafeYield := MAKELONG(Msg.Message, Msg.hwnd)

如果其中一个参数(或两个参数)大于 2^16 - 1,则不正确。

看起来代码是从 16 位 AsyncPro 版本移植到 32 位版本,而没有更改到 32 位版本,并且所有 32 位 AsyncPro 版本都存在该错误。

关于delphi - Delphi 2010 中的 ASyncPro 5.00 - 范围检查错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4394709/

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