2016-08-18 6 views
3

RPG를 호출에 액세스 할 수있는 RPG 프로그램에서 전역 변수를 정의합니까?은 어떻게 AS400</p> <p>내 주요 함수 내에서 기능을 액세스 할 수있는 글로벌 변수를 정의하는 방법은 자신의인가에 기능을

예를 들어 나는 "MAIN_PROGRAM"이라고 부르며 다른 RPG 프로그램 (SUB_PROGRAM이라고도 함)을 호출합니다. 이제 MAIN_PROGRAM에 문자열 변수 "ABC"를 정의하고 싶습니다. 내 SUB_PROGRAM 호출 할 때 내 SUB_PROGRAM 변수를 사용하십시오.

입력 매개 변수로 SUB_PROGRAM으로 보내지 않으려는 이유는 내 MAIN_PROGRAM이 생성기 (CA-PLEX)로 컴파일된다는 것입니다. 나는 60 000의 문자열 크기로 제한을 준다. 나는 PLEX가 60 000자를 잘라낼 것이기 때문에 이것을 돌아 다니는 방법을 얻었지만 SUB_PROGRAM으로 넘길 수는 없다.

내가 뭘하고 싶은지는 Glo를 만드는 방법 SUB_PROGRAM에 의해 참조 될 수있는 변수 가변 변수.

저는 RPG 프로그래밍에 익숙하지 않습니다. 나는 프로그램의 소스를 편집 할 수 있지만 전역 변수 또는 비슷한 것을 만들 수 있는지 여부를 모르겠습니다.

+2

당신은 *의 USRSPC 객체를 생성하여 메인 프로그램이 있고를 검색 할 수 있습니다 QUSPTRUS API로이 포인터를 가리 키십시오. 그런 다음 해당 포인터에 변수 BASED()를 지정하십시오. 서브 프로그램은 또한 API를 호출하고 BASED() 변수를 선언합니다. 그러면 두 프로그램이 동일한 값을 참조하게됩니다. – user2338816

답변

4

두 프로그램 사이? No.

동일한 * PGM (또는 * SRVPGM) 오브젝트에 바인드 된 두 모듈 사이에서 변수 d 스펙에 EXPORTIMPORT 키워드를 사용할 수 있습니다.

프로그램으로 두어야하는 경우 데이터를 외부 데이터 영역으로 전달하는 것이 가장 좋습니다.

어떤 플렉스 버전을 사용하고 있습니까? 6.1 이후로 사용하지 않았습니다 ... 현재 버전이 RPGLE과 보조를 맞추지 못하면 다소 놀랄 것입니다.

아직 작성하지 않았다면 CA Plex/2E community은 도움을 얻을 수있는 훌륭한 자료입니다.

+0

안녕하세요, Plex 6.1을 사용하고 있습니다. 수출용 가져 오기 키워드를 살펴보고, ca 포럼에 게시물을 올렸습니다. – Renier

+0

https://communities.ca.com/message/241907104 – Renier

7

서비스 프로그램에서 변수를 내보내고 두 프로그램을 모두 서비스 프로그램에 바인드 할 수 있습니다. 변수를 프로그램으로 가져옵니다. 프로그램이 동일한 활성 그룹에 있고 서비스 프로그램이 * CALLER이거나 동일한 이름의 활성 그룹에있는 한 두 프로그램의 가져 오기 변수는 서비스 프로그램에서 동일한 내 보낸 변수에 액세스합니다.

모든 IMPORT 및 EXPORT 변수를 동일하게 정의 할 때 매우주의해야합니다. 그렇게하는 방법은이 같은/복사 파일에 변수를 정의하는 것입니다 :

dcl-s shared_variable varchar(1000000) 
    /if defined(do_export) 
     export 
    /else 
     import 
    /endif 
    ; 

SRVPGM 모듈 소스 : 프로그램에 대한

ctl-opt nomain; 
/define do_export 
/copy copyfile 

출처 :

/copy copyfile 
shared_variable = 'abcde'; 
if shared_variabe = '12345'; 
    ... 

또 다른 방법 EXPORT 키워드없이 서비스 프로그램에서 변수를 정의하고 프로시 듀어를 사용하여 값을 가져오고 설정하는 것입니다. 이것은 IMPORT/EXPORT를 사용하는 것이 더 복잡해 보이지만 IMPORT/EXPORT를 사용하여 변수를 공유함으로써 발생하는 문제를 디버그하기가 어려울 수 있기 때문에 장기적으로는 더 쉬울 수 있습니다. 예를 들어 변수를 명시 적으로 값으로 설정하기 전에 변수를 사용하지 않으려면 "get"프로 시저에서이를 처리 할 수 ​​있습니다.

파일 복사 :

dcl-s shared_variable_t varchar(1000000); 
dcl-pr set_shared_variable; 
    val like(shared_variable_t) const; 
end-pr; 
dcl-pr get_shared_variable like(shared_variable_t) end-pr; 

SRVPGM 모듈 소스 : 프로그램에 대한

ctl-opt nomain; 
/copy copyfile 
dcl-s g_shared_variable like(shared_variable_t); 
dcl-proc set_shared_variable export; 
    dcl-pi *n; 
     val like(shared_variable_t) const; 
    end-pi; 
    g_shared_variable = val; 
end-proc; 

출처 :

/copy copyfile 
set_shared_variable ('abcde'); 
if get_shared_variable() = '12345'; 
    ...