2017-01-25 1 views
0

배열 DS를 매개 변수로 전달하려고하는데 컴파일 할 때 "RNF5343 배열에 너무 많은 생략 된 인덱스가 있습니다."오류가 발생합니다.어떻게 배열 데이터 구조를 매개 변수로 전달합니까?

배열 데이터 구조는 "PGM1"라는 프로그램의

D ResponseData DS     Dim(100) Qualified 
D Field1      3 0 
D Field2      26 
    ... 
D Field45      26 

간단한 정의 프로그램 "PGM2"

D PGM2   PR     ExtPgm('PGM1') 
D ReceiveVar       LikeDS(ResponseData) Dim(100) 
D ReceiveCount     10U 0 Const 

PGM1(RecieveVar: RecieveCount); 
를 호출

D PGM1   PI 
D ReceiveVar       LikeDS(ResponseData) Dim(100) 
D ReceiveCount     10U 0 Const 

D PGM1   PR 
D ReceiveVar       LikeDS(ResponseData) Dim(100) 
D ReceiveCount     10U 0 Const 

... 
Multiple row fetch using embedded SQL into RecieveVar 
... 

간단한 정의로 두 프로그램 모두에 동일하게 정의된다

호출 프로그램 "PGM2"를 컴파일 할 때 RNF5343 배열이 너무 많이 생략되었습니다 인덱스가 발생합니다. 배열의 인스턴스 하나만 전달하고 싶지는 않지만 전체를 전달합니다.

배열 데이터 구조를 두 프로그램간에 매개 변수로 전달하려면 어떻게해야합니까?

답변

0

나는 당신이 당신의 예제에서 약간의 오타를 가지고 있다고 생각한다. 아마도 당신의 실제 코드에서.

다음 (PGM2는) 나를 위해 잘 컴파일 : 당신이 정말로 PGM1에 정의 된 PGM1 프로토 타입을 가지고있는 경우

H option(*nodebugio) debug(*INPUT) cvtopt(*datetime) 

D ResponseData DS     Dim(100) Qualified 
D Field1      3 0 
D Field2      26 
D Field45      26 

D PGM1   PR     ExtPgm('PGM1') 
D ReceiveVar       LikeDS(ResponseData) Dim(100) 
D ReceiveCount     10U 0 Const 

    /FREE 

    pgm1(ResponseData:10); 

    *INLR=*ON; 
    return; 
    /END-FREE   

하지만 나는 TEMPLATE 키워드

H option(*nodebugio) debug(*INPUT) cvtopt(*datetime) 

D ResponseData_t DS     template 
D Field1      3 0 
D Field2      26 
D Field45      26 

d myData   ds     likeds(ResponseData_t) dim(100) 

D PGM1   PR     ExtPgm('PGM1') 
D ReceiveVar       LikeDS(ResponseData_t) Dim(100) 
D ReceiveCount     10U 0 Const 

    /FREE 

    pgm1(myData:10); 

    *INLR=*ON; 
    return; 
    /END-FREE  
1

의 사용을 권 해드립니다 PGM2의 PGM1 프로토 타입에 대한 또 다른 정의는 EXTPGM 키워드가있는 프로토 타입을 복사 파일로 이동하고 PGM1과 PGM2 모두에 복사하는 것이 좋습니다. 두 개의 별도 프로토 타입을 사용하면 매개 변수가 올바르게 전달되도록 컴파일러의 기능을 사용할 수 없습니다. 프로그램 자체에서 프로토 타입을 변경하고 호출자의 모든 프로토 타입을 변경하는 것을 잊어 버리는 것은 너무 쉽습니다.

관련 문제