استدعاء برنامج NODLL cobol ديناميكيًا من برنامج DLL cobol على z/OS

StackOverflow https://stackoverflow.com/questions/623604

سؤال

على الحاسوب المركزي الذي يستخدم Enterprise Cobol لنظام التشغيل z/OS، هل من الممكن الاتصال ديناميكيًا ببرنامج مكتبة الارتباط الديناميكي Cobol (DLL) من برنامج cobol الذي تم تجميعه باستخدام NODLL؟

هل كانت مفيدة؟

المحلول

هناك عدد من الطرق للقيام بما تريد.

إذا كنت تقصد، من خلال الاتصال الديناميكي، الاتصال عبر متغير تعريف البيانات، فلا أعتقد أنه يمكنك القيام بذلك باستخدام الرابط/الرابط نظرًا لأن الرابط يحتاج إلى معرفة الوظائف المستهدفة في وقت الربط.

عليك على وجه التحديد 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 ذات النمط الأقدم، ولكن إذا كنت في مستوى عالٍ بما فيه الكفاية، فهناك أيضًا الوظائف الأحدث dlopen/dlsym وظائف مساعد C.

هذه الصفحة يقدم الدعم لادعائي بأن NODLL/DLL يمكن للبرامج الاتصال ببعضها البعض فقط إذا كانت مرتبطة بوحدة تحميل واحدة.لا يزال يتعين عليك استخدام المكالمات الثابتة.

هذه الصفحة يقدم خيارًا آخر، حيث يمكنك وضع برنامج DLL في نفس وحدة التحميل مثل برنامج الاتصال واستخدام الاستدعاءات الثابتة للوصول إليه.يبدو أن برنامج DLL يمكنه استدعاء برامج DLL أخرى لا في وحدة التحميل تلك.لذلك قد يكون من الممكن توفير وظيفة بوابة ثابتة في برنامج DLL يمكنها استدعاء وظيفة DLL غير الموجودة في وحدة التحميل ديناميكيًا.هذا يفوق أي شيء قمت به على المكواة الكبيرة لذا سيتعين عليك التجربة.

كلتا الصفحتين مأخوذتان من مواقع publib-boulder التي الجميع يجب أن يكون استخدام منتج IBM على دراية به (جنبًا إلى جنب مع موقع الكتب الحمراء/الأوراق الحمراء أيضًا).

أنا، أفضّل dllload/dllqueryfn الحل لأن هذا هو ما اعتدت عليه من AIX وأنظمة UNIX الأخرى ويبدو أنه يوفر أقصى قدر من المرونة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top