加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:16:18 所属栏目:大数据 来源:网络整理
导读:试图在D2010中运行AsyncPro.使用Source Forge的5.00版本. 下面的AsyncPro代码(在OOMisc.pas中)失败,并在下面的MakeLong行中使用范围检查错误.我不知道如何开始调试这个. 有没有人在D2010中运行ASyncPro,或者对下面可能发生的事情有所了解?我在SourceForge上
试图在D2010中运行AsyncPro.使用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,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位AsyncPro版本的错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读