문제

Z/OS 용 Enterprise COBOL을 사용하는 메인 프레임에서 NODLL로 컴파일 된 COBOL 프로그램에서 COBOL DYAMIC LINK 라이브러리 (DLL) 프로그램을 동적으로 호출 할 수 있습니까?

도움이 되었습니까?

해결책

원하는 것을하는 방법에는 여러 가지가 있습니다.

동적으로 호출되면 데이터 정의 변수를 통해 호출을 의미한다면 바인더가 바인드 타임에 대상 기능을 알아야하므로 링커/바인더로이를 수행 할 수 없다고 생각합니다.

구체적으로해야합니다 dllload DLL로드 모듈, dllqueryfn 기능을하고 그렇게 부릅니다.

링커/바인더를 사용하려면 다음 단계가 필요하다고 생각합니다 (P1 입니다 NODLL 전화를하는 COBOL 프로그램, P2 입니다 DLL 호출되는 프로그램) :

  • P2 컴파일하고 묶어야합니다 DLL 옵션.
  • P1 컴파일해야합니다 NODYNAM 그리고 DLL과 결합합니다.
  • P1 포함해야합니다 CALL 'dll-func' (즉, 문자 그대로의 전화 만).
  • 바인딩 할 때 P1, SYSLIB 먼저 지적해야합니다 P2 위치.

이것은 바인더가 두 가지를 포함하게됩니다 P1 그리고 P2 정확히 DLL 호출이 아닌 단일로드 모듈로 dllload/dllqueryfn 해결책.

나는 이전 스타일의 DLL-fintions를 사용했지만, 당신이 높은 수준에 있다면, 더 새로도 있습니다. dlopen/dlsym C 도우미 기능.

이 페이지 내 주장에 대한 지원을 제공합니다 NODLL/DLL 프로그램은 단일로드 모듈에 묶인 경우에만 서로 호출 할 수 있습니다. 그러나 여전히 정적 호출을 사용해야합니다.

이 페이지 DLL 프로그램을 호출 프로그램과 동일한로드 모듈에 넣고 정적 호출을 사용하여이를 얻을 수있는 다른 옵션을 제공합니다. DLL 프로그램은 다른 DLL 프로그램을 호출 할 수있는 것 같습니다. ~ 아니다 그 부하 모듈에서. 따라서 DLL 프로그램에서로드 모듈이 아닌 DLL 기능을 동적으로 호출 할 수있는 정적 게이트웨이 기능을 제공 할 수 있습니다. 이것은 내가 큰 철에서 한 일을 넘어서서 실험해야합니다.

이 두 페이지 모두 Publib-Boulder 사이트에서 나온 것입니다 여러분 IBM 제품을 사용하는 것은 (레드 북/레드페이퍼 사이트와 함께)를 알아야합니다.

나, 나는 선호한다 dllload/dllqueryfn 솔루션은 그것이 내가 AIX 및 기타 유닉스에서 사용했던 것이기 때문에 최대의 유연성을 제공하는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top