EXIT
La fonction EXIT vous permet de communiquer avec une fonction dans une bibliothèque ou une application externe.
Vous pouvez utiliser EXIT lorsque vous devez extraire des informations d'une fonction existante dans une bibliothèque ou un programme ou lorsque vous devez utiliser une fonction générale qui n'est pas disponible.
Selon le système d'exploitation d'exécution, deux méthodes différentes permettent d'utiliser la fonction EXIT : 1) la méthode de bibliothèque et 2) la méthode de programme. La méthode de programme n'est pas prise en charge sur les systèmes d'exploitation Windows.
- Syntaxe :
EXIT (expression-texte-unique , expression-texte-unique , expression-texte-unique)
- Signification :
- EXIT (nom_bibliothèque, nom_fonction, entrée_fonction)
- EXIT ( nom_programme , arg1_ligne_commande , arg2_ligne_commande )
- Renvoie :
- Un élément texte unique
Utilisation 1 - méthode de bibliothèque
En phase d'exécution, la fonction function_name s'exécute dans la bibliothèque spécifiée par library_name en transmettant l'entrée input_to_the_function en tant que chaîne de texte. Le résultat de function_name est renvoyé en tant qu'élément texte à l'aide de .
Définissez par 0 si la fonction doit aboutir et définissez-la par 1 si la fonction doit échouer.
Pour obtenir des informations détaillées sur la fonction de bibliothèque exécutée par la fonction EXIT, voir Implémentation d'une fonction EXIT de bibliothèque.
Système d'exploitation AIX
Sur le système d'exploitation AIX, la bibliothèque partagée qui contient library_function doit également contenir une fonction entry_point. La fonction entry_point doit être testée de la même manière que library_function. Le serveur appelle la fonction entry_point avant d'appeler library_function. Le serveur transmet le nom de library_function à la fonction entry_point via le membre de structure EXITPARAM szFile. La fonction entry_point doit ensuite déterminer l'adresse de library_function et retransmettre cette adresse au serveur via le membre de structure EXITPARAM lpv. Le serveur utilise ensuite le contenu de lpv en tant qu'adresse pour appeler library_function.
L'exemple suivant illustre une bibliothèque partagée appelée mcshex.so qui contient la fonction entry_point et library_function.
#include <stdio.h>
#include <string.h>
#include "runmerc.h"
void AIXEntry(LPEXITPARAM);
void bin2hex(LPEXITPARAM);
unsigned int i;
char *syms[] = { "bin2hex", "AIXEntry" };
void *adr[] = { (void *)bin2hex, (void *)AIXEntry};
void AIXEntry(LPEXITPARAM lpInputStruct)
{
printf("AIXEntry called\n");
for (i = 0; i < (sizeof(syms)) / (sizeof(char *)); i++)
if ( !(strcmp(lpInputStruct->szFile, syms[i])) ) {
lpInputStruct->lpv = adr[i];
break;
}
}
void bin2hex(LPEXITPARAM lpInputStruct)
{
printf("bin2hex called\n");
printf("argument to library function: %s\n",lpInputStruct->lpszCmdLine);
lpInputStruct->nReturn = 0;
}
Pour construire cette bibliothèque partagée, exécutez les commandes suivantes :
cc -c share1.c
cc -o mcshex.so share1.o -bE:shrsub.exp -bM:SRE -eAIXEntry
Utilisation 2 - méthode de programme
La méthode de programme de la fonction EXIT n'est pas prise en charge sur les systèmes d'exploitation Windows.
En phase d'exécution, le programme spécifié par program_name s'exécute et transmet la concaténation de command_line_arg1 + " " + command_line_arg2 en tant que chaîne de texte.
Les éléments renvoyés par program_name à l'unité de sortie standard sont au format texte.
Exemples
- EXIT ( nom_programme , arg1_ligne_commande , arg2_ligne_commande )
Renvoie une chaîne de texte depuis la fonction ou l'application exécutée. Si la fonction EXIT n'est pas disponible pour un système d'exploitation spécifique, EXIT renvoie la valeur none.
- EXIT ( "mydll.dll" , "myfunction" , "12" )
L'exemple de la bibliothèque Windows transmet la valeur 12 à myfunction, une fonction dans mydll.dll. La valeur de l'élément renvoyé dépend de l'action de myfunction sur la valeur 12 qui lui a été transmise.
- IF (EXIT ("mylib.sl" , "ckCust", CustID Column:Row:DB) = "OK" , Mappe_Client_connu ( Ligne:BD ) , Mappe_Client_inconnu ( Ligne:BD ) )
De même, cet exemple de bibliothèque UNIX transmet la valeur de la zone ID_Client à ckCust, une fonction dans une bibliothèque partagée UNIX appelée mylib.sl. Si la valeur renvoyée par ckCust est OK, une mappe fonctionnelle est appelée par une Ligne de mappe pour un client connu. Faute de quoi, une autre mappe fonctionnelle est exécutée pour mapper la Ligne pour un client inconnu.
- EXIT ( "pwd" , " " , " " )
Cet exemple de programme UNIX exécute la commande d'affichage du répertoire de travail (pwd) afin de déterminer le répertoire en cours. Le nom du répertoire de travail en cours est alors renvoyé en tant que chaîne de texte. Notez que bien que la commande pwd ne requiert aucun argument de ligne de commande supplémentaire, command_line_arg1 et command_line_arg2 doivent être inclus en tant qu'espace entouré de guillemets (" ").
- TEXTTONUMBER ( ( EXIT ( "GetIncome" , Applicant:Form , "*Mortgage" ) )
Cet exemple de programme transmet la valeur de Postulant concaténé au littéral texte *Hypothèque à une application appelée Obtenir_revenus. Ce résultat est converti en nombre.
Fonctions associées
- DDEQUERY
- FAIL
- GET
- LASTERRORCODE
- LASTERRORMSG
- PUT
- RUN
- VALID