Comment on peut atteindre tard Binding en langage C? P>
6 Réponses :
La liaison des symboles dans C est toujours effectuée à l'heure de la compilation, jamais d'exécution. P>
La liaison de la bibliothèque ou la liaison dynamique telle qu'elle s'appelle, se fait via dlopen () code> et
dlsym () code> sur * Nix et
LoadLibrary () Code> et
getProcAddress () code> sous Windows. p>
La liaison tardive n'est pas vraiment une fonction du langage C lui-même, plus quelque chose que votre environnement d'exécution vous fournit. P>
De nombreux systèmes fourniront une liaison différée comme une caractéristique de la liaison / chargeur et vous pouvez également utiliser des appels explicites tels que Le seul moyen semi-portable d'obtenir une liaison tardif avec la norme C serait d'utiliser un peu de scandale avec le système Si vous ne parlez pas tant de reliure différée, mais plutôt du polymorphisme, vous pouvez atteindre cet effet avec les pointeurs de fonction. Fondamentalement, vous créez un Vous devez toujours inclure tout le code même si vous ne l'utilisez pas, mais il est est em> possible pour obtenir un polymorphisme de cette façon. P> dlopen code> (pour ouvrir une bibliothèque partagée) et
dlsym code> (Pour obtenir l'adresse d'un symbole dans cette bibliothèque afin que vous puissiez y accéder ou l'appeler). P>
() code> et même qui est au moins partiellement spécifique de la mise en œuvre. P>
struct code> qui dispose de toutes les données d'un type avec des pointeurs de fonction pour localiser les méthodes de ce type. Ensuite, dans le "constructeur" em> (typiquement une fonction init () em>), vous définissez les pointeurs de fonction sur les fonctions correspondantes pour ce type. P>
Utilisez Objective-C ou Lua. Les deux sont des langages liés en retard qui peuvent facilement interfacer avec c. P>
Bien sûr, vous pouvez implémenter votre propre schéma de résolution de nom, mais pourquoi réinventer la roue? P>
Malheureusement, vous n'avez pas spécifié de système d'exploitation. Pour UNIX, vous pouvez utiliser des bibliothèques partagées ou créer une structure de module configurable (plug-in). Pour plus de détails, vous pouvez trouver le code source d'un serveur Web Apache 1.3 utile. http://httpd.apache.org/download.cgi P>
CPPDev semble être celui et unique de frapper l'endroit avec sa remarque. S'il vous plaît, regardez La définition elle-même . En quelques mots: p>
La liaison tardive ou la liaison dynamique est un mécanisme de programmation informatique dans lequel la méthode appelée sur un objet est levée par le nom au moment de l'exécution. P> blockQuote>
Toutes les autres réponses manquent simplement le point principal, c'est «rechercher par nom». P>
La solution nécessaire serait très similaire à celle d'une table de recherche des pointeurs à fonctionner avec une fonction ou deux pour sélectionner la bonne par nom (ou même par signature). Nous appelons cela une "table de hachage". P>
Que diriez-vous d'utiliser un tableau de pointeurs de la fonction. Nous pouvons ensuite choisir le pointeur de fonction du tableau basé sur la saisie de l'utilisateur.