【问题标题】:How to launch an external procedure in OpenEdge Progress-4GL如何在 OpenEdge Progress-4GL 中启动外部程序
【发布时间】:2020-12-22 13:24:46
【问题描述】:

在学习 OpenEdge Progress-4GL 时,我偶然发现了运行外部程序,我只是阅读了以下代码行,描述了如何执行此操作:

RUN p-exprc2.p.

对于具有 C/C++、Java 和 Delphi 编程经验的人来说,这绝对没有意义:在这些语言中,有一堆过程(函数),存在于外部文件中,需要导入,例如:

filename "file_with_external_functions.<extension>"
===================================================
int f1 (...){
  return ...;
}

int f2 (...){
  return ...;
}

filename "general_file_using_the_mentioned_functions.<extension>"
=================================================================
#import file_with_external_functions.<extension>;
...
int calculate_f1_result = f1(...);
int calculate_f2_result = f2(...);

因此,换句话说:外部过程(函数)意味着您制作一个过程(函数)列表,将它们全部放入,并在需要时导入该文件并在需要时启动过程(函数)它。

在 Progress 4GL 中,您似乎正在启动整个文件!
尽管这在 C/C++、Java、Delphi 中根本没有意义,但我相信这意味着 Progress 过程文件(扩展名“*.p”)应该只包含一个过程,而文件的名称就是那个过程的名称过程。

这是正确的吗?在这种情况下,PERSISTENT 关键字的含义是什么?

提前致谢
多米尼克

【问题讨论】:

    标签: include openedge progress-4gl


    【解决方案1】:

    RUN 语句有很多选项:https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvref%2Frun-statement.html%23

    但是,在简单的情况下,如果您只是:

    RUN name.p.
    

    您正在调用一个过程。它可能是内部的、“超级的”、“持久的”或外部的。它也可以是一个 OS DLL。

    解释器将首先搜索具有该名称的内部过程。因此:

    procedure test.p.
      message "yuck".
    end.
    
    run test.p.
    

    将运行内部程序“test.p”。 “本地”内部过程在与 RUN 语句相同的编译单元内定义。 (用“.p”命名内部过程是可恶的,不要这样做。我只是为了说明 RUN 如何解析名称。)

    如果未找到本地内部过程,则 4gl 解释器将查找具有该名称的 SESSION SUPER 过程。这些是通过首先运行 PERSISTENT 过程来实例化的。

    如果没有找到匹配的内部过程或 SUPER 过程,4gl 将搜索 PROPATH 以寻找匹配的过程(它将首先寻找以 .r 结尾的编译版本),如果找到,将运行它。

    使用句柄和 IN 关键字有更复杂的方法来运行过程。您还可以传递参数和“即时编译”参数。上面的文档涉及所有这些。我的回答只是涵盖一个简单的 RUN 名称。p。

    【讨论】:

      【解决方案2】:

      Progress 最初是作为一种过程语言实现的,它通过运行程序来实现。这就是您在“运行”语句中看到的内容。

      如果要在 OO 中实现这一点,它看起来像这样:

      新程序名称(构造函数、参数、列表)。

      Progress 添加了对 OO 开发的支持,它以您似乎更熟悉的方式做事。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-18
        • 2012-03-19
        • 2018-03-14
        • 1970-01-01
        • 2014-03-19
        • 2019-01-28
        • 1970-01-01
        • 2021-05-17
        相关资源
        最近更新 更多