如何在 OpenEdge Progress-4GL 中启动外部程序

如何解决如何在 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(...);

所以,换句话说:外部过程(函数)意味着你制作一个过程(函数)列表,你把它们全部放在一起,如果需要,你可以导入该文件并在需要时启动过程(函数)

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

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

提前致谢
多米尼克

解决方法

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

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

RUN name.p.

您正在调用一个过程。它可能是内部的、“超级”的、“持久的”或外部的。它也可能是一个操作系统 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.

,

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

如果要在面向对象中实现这一点,它看起来像这样:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-