استدعاء برنامج NODLL cobol ديناميكيًا من برنامج DLL cobol على z/OS
-
05-07-2019 - |
سؤال
على الحاسوب المركزي الذي يستخدم 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 الأخرى ويبدو أنه يوفر أقصى قدر من المرونة.