1

Clarion 8 是否提供任何异常处理功能?我知道从 Clarion 5 开始,不支持类似的东西,try / catch但它是在大约 10 年前发布的。我似乎找不到任何关于如何从 C6 到 C8 中的异常恢复的信息,除非我使用的是 Clarion#(又名 Clarion.NET),但我不是。如果绝对没有类似的东西try / catch,是否有任何技巧或技巧可以用来在抛出异常时不导致程序崩溃,即使它没有得到处理?

如果有帮助,我使用的是 8.0.0.8778 版本。

编辑1:

这是一个基本程序的一些示例代码,应该可以说明该功能PROP:LastChanceHook,但是,我无法让它工作。当我运行这个程序时,我看到第一条消息“开始”,但是什么也没发生。我试过从返回 0 或 1 ,Hook但这也没有什么不同。每次我运行它时,我都必须进入任务管理器并结束程序的进程,因为它没有被杀死。

PROGRAM
    INCLUDE('CWEXCPT.INT'), ONCE
    MAP
        Hook(*ICWExceptionInfo), LONG
        Test(LONG,LONG)
    END
    CODE
        MESSAGE('[Sample] Start')
        SYSTEM{PROP:LastChanceHook} = ADDRESS(Hook)
        Test(10, 0) ! Intentionally causes an exception
        MESSAGE('[Sample] After Test')
        RETURN ! Tried removing this, no difference

Hook PROCEDURE(*ICWExceptionInfo info)
    CODE
        MESSAGE('[Sample] Start Hook')
        IF info &= NULL THEN RETURN 0 END
        Message('An exception!')
        RETURN 1 ! 0 = don't kill, anything > 0 = tell RTL to kill the thread

Test PROCEDURE (LONG a, LONG b)
    CODE
        a %= b
4

1 回答 1

2

是的,看看帮助中的 prop:LastChanceHook。它可能会为您的需求提供足够的功能。

在其他情况下,此链接上的信息也可能有用: http ://clarionsharp.com/blog/tracking-down-those-pesky-gpfs/

在 C8 的下一个公共版本(目前是 2012 年 9 月 27 日)中,可以对异常显示上的按钮(如上面的链接所示)进行一些自定义。

于 2012-09-27T23:09:17.163 回答