projman/hlp/fr/tcl/load.htm

44 lines
6.8 KiB
HTML
Raw Normal View History

2015-10-19 13:27:31 +03:00
<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 <20> 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<70>teur. <i>fileName</i> est le nom du fichier contenant le code sa forme exacte varie d'un syst<73>me <20> l'autre mais le plus souvent c'est une biblioth<74>que partag<61>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<69> pour calculer le nom d'une fonction d'initialisation. <i>interp</i> est le nom du chemin de l'interpr<70>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<70>teur dans lequel la commande <b>load</b> a <20>t<EFBFBD> appel<65>e. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Une fois le fichier charg<72> dans l'espace d'adressage de l'application, une des deux fonction d'initialisations sera appel<65>e dans le nouveau code. Typiquement la fonction d'initialisation ajoute de nouvelles commandes <20> un interpr<70>teur Tcl. Le nom de la fonction d'initialisation est d<>termin<69> par <i>packageName</i> et si le l'interpr<70>teur cible est s<>r ou non Pour les interpr<70>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<70> que la premi<6D>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<70>teur cible est un interpr<70>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 <20>crite soigneusement, ainsi elle initialisera l'interpr<70>teur s<>r avec seulement les fonctionalit<69>s fournies par le package s<>curis<69> pour <20>tre utilis<69> 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<70>teur dans lequel le package est charg<72> La fonction d'initialisation retourne <b>TCL_OK</b> ou <b>TCL_ERROR</b> pour indiquer si oui ou non elle s'est compl<70>t<EFBFBD>e avec succ<63>s; dans le cas d'une erreur elle doit fixer le r<>sultat de l'interpr<70>teur <20> pointer vers un message d'erreur. Le r<>sultat de la commande <b>load</b> sera le r<>sultat renvoy<6F> par la fonction d'initialisation. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Le chargement d'un fichier doit <20>tre fait seulement une fois pour chaque <i>fileName</i> dans une application. Si un <i>fileName</i> donn<6E> est charg<72> dans plusieurs interpr<70>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<6C>s <20> l'application, si ces packages ont <20>t<EFBFBD> declar<61>s en appelant la fonction<A HREF="74.htm"><b> Tcl_StaticPackage</b></A>. Si <i>fileName</i> est une cha<68>ne vide, alors <i>packageName</i> doit <20>tre sp<73>cifi<66>. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si <i>packageName</i> est omis ou sp<73>cifi<66> comme cha<68>ne vide, Tcl essaie de deviner le nom du package. Ceci peut <20>tre fait diff<66>remment sur diff<66>rentes plateformes. La m<>thode divinatoire par d<>faut, qui est utilis<69> sur plusieurs plateformes UNIX, est de prendre le dernier <20>l<EFBFBD>ment de <i>fileName</i>, enlever les premier trois caract<63>res si ils sont <b>lib</b>, et utiliser tout caract<63>res suivants alphab<61>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<68>ne vide, alors <i>packageName</i> doit <20>tre sp<73>cifi<66>. La commande <b>load</b> recherche en premier un package charg<72> statiquement (qui a <20>t<EFBFBD> declar<61> en appelant la fonction<A HREF="74.htm"><b> Tcl_StaticPackage</b></A>) par son nom; s'il en trouve un, il est utilis<69>. Autrement, la commande <b>load</b> recherche un package charg<72> dynamiquement par son nom, et l'utilise si trouv<75> Si plusieurs fichiers diff<66>rents ont <20>t<EFBFBD> <b>load</b>ed avec diff<66>rentes versions du package, Tcl prend le fichier qui a <20>t<EFBFBD> charg<72> 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 <20>choue avec une erreur &quot;library not found&quot;, il est aussi possible qu'une n'ait <20>t<EFBFBD> trouv<75>e Pour voir les biblioth<74>que d<>pendante, tapez &quot;dumpbin -imports &lt;dllname&gt;&quot; dans une console DOS pour voir les import de la biblioth<74>que. Quand vous chargez une DLL dans le r<>pertoire courant, Windows ignorera &quot;./&quot; comme sp<73>cificateur de chemin et utilisera une recherche heuristique pour trouver la DLL. Pour <20>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><EFBFBD> par diff<66>rent <i>fileName</i>s, il sera charg<72> plusieurs fois dans l'espace d'adressage du processus . Ce comportement peut varier d'un syst<73>me <20> un autre (certains syst<73>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<EFBFBD>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<EFBFBD>c<EFBFBD>dent</b></A>&nbsp;&nbsp;<A HREF="135.htm"><b>Suivant</b></A></div>
</BODY></HTML>