서비스 프로그램에서 변수를 내보내고 두 프로그램을 모두 서비스 프로그램에 바인드 할 수 있습니다. 변수를 프로그램으로 가져옵니다. 프로그램이 동일한 활성 그룹에 있고 서비스 프로그램이 * 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';
...
당신은 *의 USRSPC 객체를 생성하여 메인 프로그램이 있고를 검색 할 수 있습니다 QUSPTRUS API로이 포인터를 가리 키십시오. 그런 다음 해당 포인터에 변수 BASED()를 지정하십시오. 서브 프로그램은 또한 API를 호출하고 BASED() 변수를 선언합니다. 그러면 두 프로그램이 동일한 값을 참조하게됩니다. – user2338816