장 콜아웃 라이브러리 함수 호출하기 - $ZF(-6)을 사용하여 사용자 인덱스로 라이브러리 액세스하기
ZF(-6)을 사용하여 사용자 인덱스로 라이브러리 액세스하기
ZF(-6) 함수는 공유 라이브러리 파일의 위치를 모르는 애플리케이션에서도 전역적으로 정의된 인덱스를 통해 콜아웃 라이브러리에 액세스할 수 있는 효율적인 인터페이스를 제공합니다. 사용자 정의 인덱스 테이블에는 라이브러리 ID 번호와 해당 라이브러리 파일 이름으로 구성된 키-값 쌍이 저장됩니다. 라이브러리 파일의 이름을 바꾸거나 위치를 변경할 때 지정된 라이브러리 ID와 연결된 파일 이름을 변경할 수 있습니다. 이 변경 사항은 인덱스 번호별로 라이브러리를 로드하는 애플리케이션에 투명하게 표시됩니다. 인덱스 테이블을 생성 및 유지하고 $ZF(-6)로 로드된 라이브러리를 언로드하기 위한 추가 $ZF 함수가 제공됩니다.
이 섹션에서는 다음과 같은 $ZF 함수에 대해 설명합니다:
- ZF(-6) - 사용자가 지정한 인덱스 번호로 참조하는 주석 라이브러리에서 함수를 호출합니다. 아직 로드되지 않은 경우 라이브러리가 자동으로 로드됩니다.
- ZF(-4,4) - 인덱스 번호로 지정된 어노테이션 라이브러리를 언로드합니다.
- ZF(-4,5) 및 $ZF(-4,6) - 시스템 인덱스 테이블에 항목을 만들거나 삭제합니다. 시스템 인덱스는 IRIS 인스턴스 Global...의 모든 프로세스에서 사용할 수 있습니다.
- ZF(-4,7) 및 $ZF(-4,8) - 프로세스 인덱스 테이블에서 항목을 만들거나 삭제합니다. 프로세스 테이블은 시스템 테이블에서 검색되므로 프로세스에서 시스템 전체 정의를 재정의하는 데 사용할 수 있습니다.
ZF(-6) 인터페이스는 $ZF(-5)에서 사용하는 인터페이스와 유사하지만 다음과 같은 차이점이 있습니다:
- ZF(-6)을 사용하는 경우 라이브러리 인덱스 테이블을 생성해야 합니다. 라이브러리 인덱스 값은 사용자가 정의하며 런타임에 변경하거나 덮어쓸 수 있습니다.
- 라이브러리 이름은 인덱스에 저장되며 인덱스는 라이브러리를 로드한 애플리케이션에서 정의할 필요가 없습니다. 인덱스 값을 통해 라이브러리를 로드하는 종속 애플리케이션에 영향을 주지 않고 인덱스에서 라이브러리 파일의 이름과 위치를 변경할 수 있습니다.
- 라이브러리를 로드하는 별도의 $ZF 함수는 없습니다. 대신 라이브러리는 해당 함수 중 하나에 대한 첫 번째 $ZF(-6) 호출에 의해 자동으로 로드됩니다.
- 개발자가 이미 라이브러리 함수 ID를 알고 있다고 가정하므로 이름과 라이브러리 인덱스 값이 주어지면 $ZF 함수는 함수 ID를 반환하지 않습니다.
다음 예는 $ZF(-6) 인터페이스 사용 방법을 보여줍니다. 첫 번째 예는 시스템 인덱스 테이블에서 라이브러리 ID를 정의하고, 두 번째 예는 라이브러리 ID를 사용하여 라이브러리 함수를 호출합니다:
ZF(-4,5)를 사용하여 시스템 인덱스 항목을 정의합니다.
이 예는 시스템 인덱스 테이블에서 mylibrary.dll의 라이브러리 ID로 설정되며, 이 번호에 대한 정의가 이미 있는 경우 삭제되고 대체됩니다.
set LibID = 100
set status=$ZF(-4,4,LibID) // unload any existing library with this ID value
set status = $ZF(-4,5,LibID,"C:\calloutlibs\mylibrary.dll") // set system ID
- LibID는 개발자가 선택한 인덱스 번호입니다. 0보다 큰 정수가 될 수 있으며, 예약된 시스템 값은 제외됩니다.
- 인덱스 번호가 있는 라이브러리가 로드된 경우 교체 항목에서 해당 라이브러리를 제거해야 합니다.
- ZF(-4,5)를 호출하면 인덱스 번호가 라이브러리 파일 mylibrary.dll과 연결됩니다.
라이브러리 ID가 시스템 인덱스 테이블에 정의되면 현재 IRIS 인스턴스인 Global의 모든 프로세스에서 사용할 수 있습니다.
ZF(-6)으로 함수 호출하기
이 예제에서는 이전 예제에서 만든 시스템 인덱스 테이블을 사용합니다. ZF(-6)을 사용하여 라이브러리를 로드하고 라이브러리 함수를 호출한 다음 라이브러리를 언로드합니다. 시스템 인덱스에서 라이브러리 ID를 정의한 동일한 애플리케이션에서 이 코드를 호출할 필요는 없습니다:
set LibID = 100 // library ID in system index table
set FuncID = 2 // second function in library ZFEntry table
set x = $ZF(-6,LibID, FuncID, "arg1") // call function 2
set status = $ZF(-4,4,LibID) // unload the library
- LibID는 시스템 인덱스에 정의된 라이브러리 ID로, 애플리케이션이 라이브러리 기능을 사용하기 위해 라이브러리 이름이나 경로를 알 필요가 없습니다.
- FuncID는 라이브러리 LibID의 ZFEntry 테이블에 나열된 두 번째 함수의 함수 식별자입니다. 개발자가 라이브러리 코드에 액세스할 수 있다고 가정합니다. 인터페이스에는 라이브러리 함수 이름을 지정하여 이 번호를 검색하는 함수가 없습니다.
- ZF(-6) 호출은 라이브러리 ID, 함수 ID, 함수에 전달되는 인수로 "arg1"을 라이브러리 ID로 지정합니다. 아직 로드되지 않은 경우, 이 호출은 콜아웃 라이브러리 mylibrary.dll을 로드하고 ZFEntry 테이블에 나열된 두 번째 함수를 호출합니다.
- ZF(-4,4)를 호출하면 라이브러리가 언로드됩니다. ZF(-6)에 의해 로드된 각 라이브러리는 프로세스가 종료되거나 $ZF(-4,4)에 의해 언로드될 때까지 상주 상태로 유지됩니다.





