Cobol 如何使用CBL_EXEC_RUN_单元

Cobol 如何使用CBL_EXEC_RUN_单元,cobol,Cobol,我们正在尝试从程序A异步调用程序B 当我们尝试使用CBL_EXEC_RUN_单元从程序A调用程序B时,会出现以下错误 我们使用的是microfocus COBOL。203消息告诉您,您没有正确地使用“程序”部分中的项目。对ADDTWO程序的实际调用中缺少一个或两个参数 我不知道您是否在“命令行”中提供了两个参数,也不知道您是否正确地提供了它们,以便能够调用ADDTWO。ADDTWO将像主程序一样运行。如何为运行环境(操作系统和Micro Focus的运行时)中的主COBOL程序提供多个参数值 我

我们正在尝试从程序A异步调用程序B 当我们尝试使用CBL_EXEC_RUN_单元从程序A调用程序B时,会出现以下错误


我们使用的是microfocus COBOL。

203消息告诉您,您没有正确地使用“程序”部分中的项目。对ADDTWO程序的实际调用中缺少一个或两个参数

我不知道您是否在“命令行”中提供了两个参数,也不知道您是否正确地提供了它们,以便能够调用ADDTWO。ADDTWO将像主程序一样运行。如何为运行环境(操作系统和Micro Focus的运行时)中的主COBOL程序提供多个参数值


我不确定您是否应该以这种方式指定命令行的长度。文档中有不同的建议。

尝试使用
START
语句进行多线程

您可以在Cobol MicroFocus安装目录中的
BASE\DEMO\MTHREAD\MTHREAD.CBL
下找到一个示例

使用
START
语句,您的代码将如下所示:

   IDENTIFICATION DIVISION.
   PROGRAM-ID.    PROGA.
   WORKING-STORAGE SECTION.

   01  THREAD-HANDLE              usage thread-pointer.

   77  W77-ACCEPT-KEY PIC X.

   01  W01-NUMBERS.
   03  Num1 Pic s9(005).
   03  Num2 Pic s9(005).

   PROCEDURE DIVISION.
   0000-MAIN SECTION.
   0000.
       MOVE 1 TO Num1.
       MOVE 2 TO Num2.

       START "PROGB"  USING W01-NUMBERS
                      IDENTIFIED BY THREAD-HANDLE.


       DISPLAY "Press any key to end me...".
       ACCEPT W77-ACCEPT-KEY.

       PERFORM 9999-FINISH-IT.
   0000-EXIT.
        EXIT.

   9999-FINISH-IT SECTION.
   9999.
       EXIT PROGRAM.
       STOP RUN.
   9999-EXIT.
        EXIT.

   END PROGRAM PROGA.

   IDENTIFICATION DIVISION.
   PROGRAM-ID.    PROGB.
   WORKING-STORAGE SECTION.

   77  W77-RESULT PIC S9(006).
   LINKAGE SECTION.

   01  W01-NUMBERS.
       03 Num1 Pic s9(005).
       03 Num2 Pic s9(005).

   PROCEDURE DIVISION USING W01-NUMBERS.
   0000-MAIN SECTION.
   0000.
       compute W77-RESULT = Num1 + Num2.
       DISPLAY "Hello from ProgB".
       Display "Result is: " W77-RESULT.

       PERFORM 9999-FINISH-IT.
   0000-EXIT.
        EXIT.

   9999-FINISH-IT SECTION.
   9999.
       EXIT PROGRAM.
       STOP RUN.
   9999-EXIT.
        EXIT.

   END PROGRAM PROGB.

您是否尝试过在调用之前显示
w-work
,以确保其设置正确?您不是在使用MircocFocus COBOL,而是在使用Micro Focus COBOL。START是否可以像示例一样使用多个项目,或者像这里这样使用一个项目?Hi Hudler,这是对PRGB的异步调用吗?@BillWoodger:只有一个参数-请参阅'Format 3'@user1085296:是的,它会。我建议您查看我之前评论中的相同链接。嗨,比尔,这是我们调用程序B的方式:使用“ADDTWO 0303”按值11结束调用“CBL_EXEC_RUN_UNIT”。你能说我们传递输入的方式是否错误吗?如果我们不给出按值11的注释,ADDTWO的第一个字符被取为“A”,它在dirctoy中搜索该程序A,并抛出一个错误,表示该程序A在驱动器/目录中不存在。是的,你的调用是错误的。0303不是两个不同的数据段,而是一个数据段。您可以修改ADDTWO的链接部分,使其看起来像@J.Hudler所显示的那样,并查看它的作用。例如,如果您对ADDTWO进行一个简单的调用,那么使用field-a,field-b调用“ADDTWO”。我的观点不是说你不需要坐在那里做这项工作,而是文字可能不是最好的方式。微焦点示例显示了PIC 9(4)COMP-5字段。查看您的文档。如果调用中有效的数值文本存储在该大小的字段中,您可能会同意,否则请更改它。
Prog A:
       procedure division.
       00.
           display "INSIDE PROGRAM CALLPRG".
           string w-prog-name delimited by size
                  " " delimited size
                  w-a w-b delimited by size
                       into w-work
           initialize flags run-unit-id stack-size
           call "CBL_EXEC_RUN_UNIT" using w-work
                                     by value 11
                         by reference run-unit-id
                         by value stack-size flags
                                returning status-code
prog B:
       working-storage section.
       01 C pic 9(03).
       linkage section.
       01 A pic 9(02).
       01 B pic 9(02).
       procedure division using a b.
       00.
           display "INSIDE PROGRAM ADDTWO".
           display a.
           display b.
           add a b giving C.
           display "SUM IS ".
           display c.
           display "EXITING PROGRAM ADDTWO".
       ex.  exit.
   IDENTIFICATION DIVISION.
   PROGRAM-ID.    PROGA.
   WORKING-STORAGE SECTION.

   01  THREAD-HANDLE              usage thread-pointer.

   77  W77-ACCEPT-KEY PIC X.

   01  W01-NUMBERS.
   03  Num1 Pic s9(005).
   03  Num2 Pic s9(005).

   PROCEDURE DIVISION.
   0000-MAIN SECTION.
   0000.
       MOVE 1 TO Num1.
       MOVE 2 TO Num2.

       START "PROGB"  USING W01-NUMBERS
                      IDENTIFIED BY THREAD-HANDLE.


       DISPLAY "Press any key to end me...".
       ACCEPT W77-ACCEPT-KEY.

       PERFORM 9999-FINISH-IT.
   0000-EXIT.
        EXIT.

   9999-FINISH-IT SECTION.
   9999.
       EXIT PROGRAM.
       STOP RUN.
   9999-EXIT.
        EXIT.

   END PROGRAM PROGA.

   IDENTIFICATION DIVISION.
   PROGRAM-ID.    PROGB.
   WORKING-STORAGE SECTION.

   77  W77-RESULT PIC S9(006).
   LINKAGE SECTION.

   01  W01-NUMBERS.
       03 Num1 Pic s9(005).
       03 Num2 Pic s9(005).

   PROCEDURE DIVISION USING W01-NUMBERS.
   0000-MAIN SECTION.
   0000.
       compute W77-RESULT = Num1 + Num2.
       DISPLAY "Hello from ProgB".
       Display "Result is: " W77-RESULT.

       PERFORM 9999-FINISH-IT.
   0000-EXIT.
        EXIT.

   9999-FINISH-IT SECTION.
   9999.
       EXIT PROGRAM.
       STOP RUN.
   9999-EXIT.
        EXIT.

   END PROGRAM PROGB.