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