如何在 OpenEdge Progress-4GL 中启动外部程序
How to launch an external procedure in OpenEdge Progress-4GL
在学习 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(...);
因此,换句话说:外部过程(函数)意味着您制作了一个过程(函数)列表,将它们全部放入,并在需要时导入该文件并启动过程(函数)你需要它。
In Progress 4GL,您似乎正在启动整个文件!
虽然这在 C/C++、Java、Delphi 中毫无意义,但我相信这意味着 Progress 程序文件(扩展名“*.p”)应该只包含一个程序,然后文件的名称就是该过程的名称。
这是否正确?在那种情况下,PERSISTENT
关键字的含义是什么?
提前致谢
多米尼克
但是,在简单的情况下,如果您只是:
RUN name.p.
您正在调用一个程序。它可能是内部的、“超级的”、“持久的”或外部的。它也可以是一个 OS DLL。
解释器将首先搜索具有该名称的内部过程。因此:
procedure test.p.
message "yuck".
end.
run test.p.
请问运行内部程序“test.p”。 “本地”内部过程在与 运行 语句相同的编译单元内定义。 (用“.p”命名内部过程是可憎的,不要这样做。我只是展示它来阐明 运行 如何解析名称。)
如果未找到本地内部过程,则 4gl 解释器将查找具有该名称的 SESSION SUPER 过程。这些是通过首先 运行 一个 PERSISTENT 过程实例化的。
如果没有找到匹配的内部过程或 SUPER 过程,4gl 将搜索 PROPATH 寻找匹配的过程(它将首先寻找以 .r 结尾的编译版本),如果找到,将 运行 那.
运行 使用句柄和 IN 关键字的过程有更复杂的方法。您还可以传递参数和“即时编译”参数。上面的文档涵盖了所有这些内容。我的回答只是涵盖了一个简单的 运行 name.p.
Progress 最初是作为一种过程语言实现的,它是由 运行ning 程序完成的。这就是您在“运行”语句中看到的内容。
如果要在 OO 中实现它,它看起来像这样:
新程序名(构造函数、参数、列表)。
Progress 添加了对 OO 开发的支持,它以您似乎更熟悉的方式进行操作。
在学习 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(...);
因此,换句话说:外部过程(函数)意味着您制作了一个过程(函数)列表,将它们全部放入,并在需要时导入该文件并启动过程(函数)你需要它。
In Progress 4GL,您似乎正在启动整个文件!
虽然这在 C/C++、Java、Delphi 中毫无意义,但我相信这意味着 Progress 程序文件(扩展名“*.p”)应该只包含一个程序,然后文件的名称就是该过程的名称。
这是否正确?在那种情况下,PERSISTENT
关键字的含义是什么?
提前致谢
多米尼克
但是,在简单的情况下,如果您只是:
RUN name.p.
您正在调用一个程序。它可能是内部的、“超级的”、“持久的”或外部的。它也可以是一个 OS DLL。
解释器将首先搜索具有该名称的内部过程。因此:
procedure test.p.
message "yuck".
end.
run test.p.
请问运行内部程序“test.p”。 “本地”内部过程在与 运行 语句相同的编译单元内定义。 (用“.p”命名内部过程是可憎的,不要这样做。我只是展示它来阐明 运行 如何解析名称。)
如果未找到本地内部过程,则 4gl 解释器将查找具有该名称的 SESSION SUPER 过程。这些是通过首先 运行 一个 PERSISTENT 过程实例化的。
如果没有找到匹配的内部过程或 SUPER 过程,4gl 将搜索 PROPATH 寻找匹配的过程(它将首先寻找以 .r 结尾的编译版本),如果找到,将 运行 那.
运行 使用句柄和 IN 关键字的过程有更复杂的方法。您还可以传递参数和“即时编译”参数。上面的文档涵盖了所有这些内容。我的回答只是涵盖了一个简单的 运行 name.p.
Progress 最初是作为一种过程语言实现的,它是由 运行ning 程序完成的。这就是您在“运行”语句中看到的内容。
如果要在 OO 中实现它,它看起来像这样:
新程序名(构造函数、参数、列表)。
Progress 添加了对 OO 开发的支持,它以您似乎更熟悉的方式进行操作。