Sur l'ordinateur central utilisant Enterprise Cobol for z/OS, est-il possible de CALL dynamiquement un programme de bibliothèque de liens (DLL) Cobol Dyamic à partir d'un programme cobol ayant été compilé avec NODLL?
Appel dynamique d'un programme cobol NODLL à partir d'un programme DLL cobol sous z/OS
Répondre
Il existe plusieurs façons de faire ce que vous voulez. Si, par appel dynamique, vous entendez un appel via une variable de définition de données, je ne pense pas que vous puissiez le faire avec le lieur/liant car le classeur doit connaître les fonctions cibles au moment de la liaison.
Vous avez à spécifiquement dllload
le module de charge de DLL, dllqueryfn
la fonction et l'appeler de cette façon.
Pour utiliser l'éditeur de liens/liant, je crois que les étapes suivantes sont nécessaires (P1
est le programme NODLL
COBOL faisant l'appel, P2
est le programme DLL
appelé):
P2
doit être compilé et lié avec l'optionDLL
.P1
doit être compilé avecNODYNAM
et lié avec DLL.P1
doit contenirCALL 'dll-func'
(c'est-à-dire, appels littéraux uniquement). Lorsque la liaisonP1
,SYSLIB
doit d'abord pointer vers l'emplacementP2
.
Cela entraînera le liant à incorporer à la fois dans un seul module de charge P1
et P2
qui est pas exactement DLL appeler mais je ne pense pas qu'il y ait un moyen de contourner cette autre que la solution dllload/dllqueryfn
.
J'ai utilisé les anciennes fonctions dll mais, si vous êtes à un niveau assez élevé, il y a aussi les nouvelles fonctions auxiliaires dlopen/dlsym
C.
This page fournit un support pour ma contention que les programmes NODLL/DLL
ne peuvent s'appeler que s'ils sont liés dans un seul module de chargement. Cependant, vous devez toujours utiliser des appels statiques.
This page offre une autre option, où vous pouvez mettre le programme DLL dans le même module de chargement que le programme appelant et utiliser les appels statiques pour y accéder. Il semble que le programme DLL peut appeler d'autres programmes DLL pas dans ce module de chargement. Il peut donc être possible de fournir une fonction de passerelle statique dans le programme DLL qui peut appeler dynamiquement une fonction DLL qui ne se trouve pas dans le module de chargement. C'est au-delà de tout ce que j'ai jamais fait sur le gros fer, donc vous devrez expérimenter.
Ces deux pages proviennent des sites publib-bloc que tout le monde utilisant un produit IBM doit connaître (ainsi que le site redbooks/redpapers). Moi, je préfère la solution dllload/dllqueryfn
puisque c'est ce à quoi je suis habitué depuis AIX et d'autres UNIX, et cela semble offrir une flexibilité maximale.
- 1. Utilisation de l'API Java à partir d'un programme Cobol
- 2. COBOL Confusion
- 3. COBOL à SQL Server
- 4. Fujitsu COBOL 3.0
- 5. Comment appelez-vous un programme java à partir d'un COBOL sur iSeries V5R4
- 6. .Net, cobol, copybook
- 7. erreur lors de la compilation dans Fujitsu COBOL 3.0
- 8. Appel de l'application à partir de rails
- 9. Problème avec le chargement dynamique d'une DLL dans mon programme
- 10. Appel d'une fonction C++ à partir d'un programme C
- 11. Comment transmettre des options d'exécution à AIX COBOL?
- 12. Conversion de l'opération bit à bit Delphi en Cobol
- 13. Liaison explicite DLL et programme se bloque
- 14. Décharger COM dll du programme .Net
- 15. comparaison de fichiers avec des enregistrements en double dans cobol
- 16. Fujitsu COBOL 3.0 - problème lors de l'exécution de
- 17. C++ dll dans le programme C
- 18. JMP0811I-U Erreur d'exécution Fujitsu après la compilation de Fujitsu COBOL avec DB2 SQL: cause/remède?
- 19. Programme Automation sous Windows avec VB.NET 2008
- 20. Générer par programme une DLL C Win32
- 21. Comment faire pour exécuter le programme .dll?
- 22. Interrompre le programme Python dans une DLL
- 23. Comment obtenir par programme des dépendances DLL
- 24. Exécuter un programme à partir de MemoryStream
- 25. Comment affecter le résultat d'un appel de sous-programme à des références de tableau en Perl?
- 26. Répertoire du programme en cours sous Linux?
- 27. Exécuter l'application par programme sous Vista
- 28. Appel d'une méthode VB6 à partir d'une DLL .NET
- 29. Appel des fonctions DLL à partir de VB6
- 30. Appel d'une DLL à partir de C# (VS2008)
@Pax: Merci pour votre bonne réponse. +1 et marque verte. –