如何找到调用过程的过程句柄?
How to find the procedure handle of the calling procedure?
我正在尝试编写一些测试程序,我想 运行 一个过程,并让该过程调用调用程序中的内部函数和过程。据我了解,您可以使用 RUN x IN y
,其中 y 是调用堆栈中的任何过程。
但是,我似乎找不到任何方法来获取调用过程的句柄。似乎没有向上移动调用堆栈的方法。
我能想到的唯一方法是将调用过程的 THIS-PROCEDURE
句柄作为参数传递。它会工作,但似乎很不优雅。
你快到了。请看下面使用 THIS-PROCEDURE:INSTANTIATING-PROCEDURE 句柄的示例。
INSTANTIATING-PROCEDURE attribute
Returns the handle to the procedure in which an object was instantiated.
parentProgram.p
RUN childProgram.p.
PROCEDURE hello:
DEFINE INPUT PARAMETER pcMessage AS CHARACTER NO-UNDO.
MESSAGE "Child says:" pcMessage VIEW-AS ALERT-BOX INFORMATION.
END.
childProgram.p
MESSAGE "Calling parent. Anybody home?" VIEW-AS ALERT-BOX.
IF VALID-HANDLE(THIS-PROCEDURE:INSTANTIATING-PROCEDURE) THEN
RUN hello IN THIS-PROCEDURE:INSTANTIATING-PROCEDURE (INPUT "I am your child") NO-ERROR.
IF ERROR-STATUS:ERROR THEN DO:
MESSAGE "That didn't work" VIEW-AS ALERT-BOX ERROR.
END.
要获取调用过程的句柄,请使用 SOURCE-PROCEDURE 句柄。它具有 last 过程调用的句柄。如果另一个过程是 运行,那么它将更改以匹配该过程实例的句柄,因此如果您需要您的程序记住调用它的人,您的代码将需要在调用时立即存储该值。
我正在尝试编写一些测试程序,我想 运行 一个过程,并让该过程调用调用程序中的内部函数和过程。据我了解,您可以使用 RUN x IN y
,其中 y 是调用堆栈中的任何过程。
但是,我似乎找不到任何方法来获取调用过程的句柄。似乎没有向上移动调用堆栈的方法。
我能想到的唯一方法是将调用过程的 THIS-PROCEDURE
句柄作为参数传递。它会工作,但似乎很不优雅。
你快到了。请看下面使用 THIS-PROCEDURE:INSTANTIATING-PROCEDURE 句柄的示例。
INSTANTIATING-PROCEDURE attribute
Returns the handle to the procedure in which an object was instantiated.
parentProgram.p
RUN childProgram.p.
PROCEDURE hello:
DEFINE INPUT PARAMETER pcMessage AS CHARACTER NO-UNDO.
MESSAGE "Child says:" pcMessage VIEW-AS ALERT-BOX INFORMATION.
END.
childProgram.p
MESSAGE "Calling parent. Anybody home?" VIEW-AS ALERT-BOX.
IF VALID-HANDLE(THIS-PROCEDURE:INSTANTIATING-PROCEDURE) THEN
RUN hello IN THIS-PROCEDURE:INSTANTIATING-PROCEDURE (INPUT "I am your child") NO-ERROR.
IF ERROR-STATUS:ERROR THEN DO:
MESSAGE "That didn't work" VIEW-AS ALERT-BOX ERROR.
END.
要获取调用过程的句柄,请使用 SOURCE-PROCEDURE 句柄。它具有 last 过程调用的句柄。如果另一个过程是 运行,那么它将更改以匹配该过程实例的句柄,因此如果您需要您的程序记住调用它的人,您的代码将需要在调用时立即存储该值。