2009-03-08 7 views

Répondre

2

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'option DLL.
  • P1 doit être compilé avec NODYNAM et lié avec DLL.
  • P1 doit contenir CALL 'dll-func' (c'est-à-dire, appels littéraux uniquement). Lorsque la liaison P1, SYSLIB doit d'abord pointer vers l'emplacement P2.

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.

+0

@Pax: Merci pour votre bonne réponse. +1 et marque verte. –

Questions connexes