projman/hlp/fr/tcl/load.htm
2015-10-19 14:27:31 +04:00

44 lines
6.8 KiB
HTML

<HTML><HEAD>
<BASEFONT FACE="Times New Roman" SIZE="2" COLOR="#000000">
</HEAD>
<BODY>
<div><H3><b>load&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Commandes Internes Tcl</b></H3></div>
<HR ALIGN="center">
<div><b>NOM</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">load - Charge du code machine et initialise de nouvelles commandes.
</div><br>
<div><b>SYNTAXE</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;"><b>load </b><i>fileName</i> <br>
<b>load </b><i>fileName packageName</i> <br>
<b>load </b><i>fileName packageName interp</i>
</div><br>
<div><b>DESCRIPTION</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Cette commande charge du code binaire à partir d'un fichier dans l'espace d'adressage de l'application et appelle une fonction d'initialisation dans le package pour l'incorporer dans un interpréteur. <i>fileName</i> est le nom du fichier contenant le code sa forme exacte varie d'un système à l'autre mais le plus souvent c'est une bibliothèque partagée, tel un fichier<b>.so</b> sous Solaris ou une DLL sous Windows. <i>packageName</i> est le nom du package, et est utilisé pour calculer le nom d'une fonction d'initialisation. <i>interp</i> est le nom du chemin de l'interpréteur dans lequel charger le package (voyez la page de manuel <A HREF="126.htm"><b>interp</b></A> pour les détails); si <i>interp</i> est omis, il devient l'interpréteur dans lequel la commande <b>load</b> a été appelée. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Une fois le fichier chargé dans l'espace d'adressage de l'application, une des deux fonction d'initialisations sera appelée dans le nouveau code. Typiquement la fonction d'initialisation ajoute de nouvelles commandes à un interpréteur Tcl. Le nom de la fonction d'initialisation est déterminé par <i>packageName</i> et si le l'interpréteur cible est sùr ou non Pour les interpréteurs normaux le nom de la fonction d'initialisation aura le forme <i>pkg</i><b>_Init</b>, où <i>pkg</i> est le même que <i>packageName</i> excepté que la première lettre est convertie en majuscule et tout autre lettres sont converti en minuscule Par exemple, si <i>packageName</i> est <b>foo</b> ou <b>FOo</b>, le nom de la fonction d'initialisation sera <b>Foo_Init</b>. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si l'interpréteur cible est un interpréteur sùr, alors le nom de la fonction d'initialisation sera <i>pkg</i><b>_SafeInit</b> au lieu de of <i>pkg</i><b>_Init</b>. La fonction <i>pkg</i><b>_SafeInit</b> sera écrite soigneusement, ainsi elle initialisera l'interpréteur sùr avec seulement les fonctionalités fournies par le package sécurisé pour être utilisé par du code inconnu. Pour plus information sur Safe-Tcl, voyez la page de manuel<b> safe</b>. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">La fonction d'initialisation doit correspondre au prototype suivant: </div>
<div ALIGN="LEFT" style="margin-left: 102px;">typedef int Tcl_PackageInitProc(Tcl_Interp *<i>interp</i>);</div>
<div ALIGN="LEFT" style="margin-left: 51px;">L'argument <i>interp</i> identifie l'interpréteur dans lequel le package est chargé La fonction d'initialisation retourne <b>TCL_OK</b> ou <b>TCL_ERROR</b> pour indiquer si oui ou non elle s'est complétée avec succès; dans le cas d'une erreur elle doit fixer le résultat de l'interpréteur à pointer vers un message d'erreur. Le résultat de la commande <b>load</b> sera le résultat renvoyé par la fonction d'initialisation. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Le chargement d'un fichier doit être fait seulement une fois pour chaque <i>fileName</i> dans une application. Si un <i>fileName</i> donné est chargé dans plusieurs interpréteurs, alors le premier <b>load</b> chargera le code et appellera la fonction d'initialisation; le suivant <b>load</b> appelera la fonction d'initialisation sans recharger le code. Il n'est pas possible de décharger ou recharger un package. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">La commande <b>load</b> supporte aussi les packages statiquement liés à l'application, si ces packages ont été declarés en appelant la fonction<A HREF="74.htm"><b> Tcl_StaticPackage</b></A>. Si <i>fileName</i> est une chaîne vide, alors <i>packageName</i> doit être spécifié. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si <i>packageName</i> est omis ou spécifié comme chaîne vide, Tcl essaie de deviner le nom du package. Ceci peut être fait différemment sur différentes plateformes. La méthode divinatoire par défaut, qui est utilisé sur plusieurs plateformes UNIX, est de prendre le dernier élément de <i>fileName</i>, enlever les premier trois caractères si ils sont <b>lib</b>, et utiliser tout caractères suivants alphabétiques et underline comme le nom du module. Par exemple, la commande <b>load </b><b>libxyz4.2.so</b> utilise le nom de module <b>xyz</b> et la commande <b>load bin/last.so &#123;}</b> utilise le nom de module <b>last</b>. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si <i>fileName</i> est une chaîne vide, alors <i>packageName</i> doit être spécifié. La commande <b>load</b> recherche en premier un package chargé statiquement (qui a été declaré en appelant la fonction<A HREF="74.htm"><b> Tcl_StaticPackage</b></A>) par son nom; s'il en trouve un, il est utilisé. Autrement, la commande <b>load</b> recherche un package chargé dynamiquement par son nom, et l'utilise si trouvé Si plusieurs fichiers différents ont été <b>load</b>ed avec différentes versions du package, Tcl prend le fichier qui a été chargé en premier
</div><br>
<div><b>PROBLEMES DE PORTABILITE</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">
<DL>
<DT><b>Windows</b></DT><DD>Quand un load échoue avec une erreur &quot;library not found&quot;, il est aussi possible qu'une n'ait été trouvée Pour voir les bibliothèque dépendante, tapez &quot;dumpbin -imports &lt;dllname&gt;&quot; dans une console DOS pour voir les import de la bibliothèque. Quand vous chargez une DLL dans le répertoire courant, Windows ignorera &quot;./&quot; comme spécificateur de chemin et utilisera une recherche heuristique pour trouver la DLL. Pour éviter cela, chargez la DLL avec
<br>&nbsp;&nbsp;&nbsp; load &#91;file join &#91;pwd] mylib.DLL]
</DD>
</DL>
</div>
<div><b>BUGS</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Si le même fichier est <b>load</b>é par différent <i>fileName</i>s, il sera chargé plusieurs fois dans l'espace d'adressage du processus . Ce comportement peut varier d'un système à un autre (certains systèmes peuvent detecter le chargement redondant, d'autres non) <br>
</div><br>
<div><b>VOIR EGALEMENT</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;"><A HREF="125.htm"><b>info</b></A><b> sharedlibextension</b>, Tcl_StaticPackage, sùr(n)</div><br>
<div>Dernière révision: 7.5</div>
<br>
<br><div ALIGN="CENTER"><A HREF="index.htm"><b>Index</b></A>&nbsp;&nbsp;<A HREF="133.htm"><b>Précédent</b></A>&nbsp;&nbsp;<A HREF="135.htm"><b>Suivant</b></A></div>
</BODY></HTML>