Delphi 2010 ASyncPro 5.00版本中如何避免范围检查错误?
- 内容介绍
- 文章标签
- 相关推荐
本文共计613个文字,预计阅读时间需要3分钟。
在D2010中运行AsyncPro时,遇到源代码失败,尤其是在OOMisc.pas中的AsyncPro代码以及MakeLong行中存在错误。由于不确定如何开始调试,以下是一些简单的调试步骤:
1. 查看错误信息: - 确认错误的具体信息,包括错误代码和描述。
2. 检查AsyncPro代码: - 在OOMisc.pas中,仔细检查AsyncPro相关的代码,确保所有API调用都正确。
3. 检查MakeLong函数: - 在MakeLong行,检查是否有参数范围错误或类型不匹配。
4. 逐步调试: - 使用调试工具逐步执行代码,观察变量值和程序执行流程。
5. 参考文档: - 查阅AsyncPro的官方文档,了解相关API的正确用法。
6. 搜索社区: - 在Source Forge社区或相关技术论坛上搜索类似问题,看是否有其他人遇到过并解决了。
7. 代码示例: - 如果可能,查找其他成功的AsyncPro使用示例,对比自己的代码。
8. 测试代码: - 尝试将AsyncPro代码与其他部分隔离,单独测试,以确定问题所在。
9. 逐步修复: - 根据调试结果,逐步修复代码中的错误。
10. 代码审查: - 请其他开发者或同事审查代码,可能会有新的发现。
请注意,以上步骤仅供参考,具体操作可能需要根据实际情况进行调整。
试图在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, 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位AsyncPro版本的错误.
本文共计613个文字,预计阅读时间需要3分钟。
在D2010中运行AsyncPro时,遇到源代码失败,尤其是在OOMisc.pas中的AsyncPro代码以及MakeLong行中存在错误。由于不确定如何开始调试,以下是一些简单的调试步骤:
1. 查看错误信息: - 确认错误的具体信息,包括错误代码和描述。
2. 检查AsyncPro代码: - 在OOMisc.pas中,仔细检查AsyncPro相关的代码,确保所有API调用都正确。
3. 检查MakeLong函数: - 在MakeLong行,检查是否有参数范围错误或类型不匹配。
4. 逐步调试: - 使用调试工具逐步执行代码,观察变量值和程序执行流程。
5. 参考文档: - 查阅AsyncPro的官方文档,了解相关API的正确用法。
6. 搜索社区: - 在Source Forge社区或相关技术论坛上搜索类似问题,看是否有其他人遇到过并解决了。
7. 代码示例: - 如果可能,查找其他成功的AsyncPro使用示例,对比自己的代码。
8. 测试代码: - 尝试将AsyncPro代码与其他部分隔离,单独测试,以确定问题所在。
9. 逐步修复: - 根据调试结果,逐步修复代码中的错误。
10. 代码审查: - 请其他开发者或同事审查代码,可能会有新的发现。
请注意,以上步骤仅供参考,具体操作可能需要根据实际情况进行调整。
试图在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, 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位AsyncPro版本的错误.

