SCR/AL1 - TOME III. Les librairies utilitaires
Le système DDE (Dynamic Data Exchange) est intégré dans Windows et permet à une application quelconque de devenir serveur pour les autres programmes. Ce système permet en outre d'interroger tout programme ayant une fonction de serveur DDE.
L'implémentation qui en est faite dans SCR limite les transferts à des données de type texte, mais est extrèmement simple à mettre en oeuvre.
Fonctions du serveur DDE
Fonctions client DDE haut niveau
Fonctions client DDE bas niveau
Syntax
WscrDdeServer(
char *service,
char **topic,
char *(*Request)(char *, char *),
int (*Poke)(char *, char *, char *)
)
Description
Fonction d'initialisation d'un serveur DDE. Cette fonction n'est exploitable que sous Windows 32.
Cette fonction doit être lancée dès que le serveur peut être appelé. En général, elle est exécutée dans WscrMain().
Ses paramètres indiquent à toutes les autres applications les services qui sont rendus disponibles et les fonctions utilisateur à utiliser pour répondre aux requêtes.
Fonction Request()
La fonction Request() répond à une demande: elle renvoie normalement une valeur au programme appelant. Mais rien n'empêche de lui faire exécuter n'importe quelle fonction dans le programme serveur.
La fonction Request() a pour syntaxe :
char *Request(char *topic, char *item)
Le topic est nécessairement l'un de ceux passés comme paramètre d'initialisation du serveur (le système filtre les topics inexistants). L'item est n'importe quel texte passé par le programme appelant.
Le résultat de la fonction doit être nul est cas d'erreur ou un string alloué en cas de réponse. Ce string est libéré par le système et doit donc impérativement être alloué.
Exemple
char *MyRequest(char *topic, char *item)
{
char *ptr;
if(strcmp(topic, "CLIENTNAME") == 0) {
is_client_NUM = atol(item);
if(IS_search(is_client, 0, SCR_EQ, (char *)0) == 0) {
ptr = SCR_malloc(40);
strcpy(ptr, is_client_NAME);
return(ptr);
}
else return((char *)0);
}
....
}
Fonction Poke()
L'objectif de la fonction Poke est de changer des valeurs dans le programme serveur, par exemple en ajoutant un record ou en modifiant un champ.
La fonction Poke() a pour syntaxe :
int Poke(char *topic, char *item, char *data)
Le topic est l'un de ceux passés comme paramètre d'initialisation du serveur. L'item est n'importe quel texte passé par le programme appelant. data est la valeur modifiée ou à fixer.
Le résultat de la fonction doit être 0 en cas de succès, -1 en cas d'erreur.
Exemple
int Poke(char *topic, char *item, char *data)
{
if(strcmp(topic, "CLIENTNAME") == 0) {
is_client_NUM = atol(item);
if(IS_search(is_client, 0, SCR_EQ, (char *)0) == 0) {
SCR_set_text(is_client_name, data);
return(IS_rewrite(is_client));
}
else return(-1);
}
....
}
Voir également
WscrDdeServerEnd()
File s_wddesr.c
WscrDdeServer(char *service, char **topic, char *(*Request)(char *, char *), int (*Poke)(char *, char *, char *))
WscrDdeServerEnd()
Syntax
WscrDdeServerEnd()
Description
Cette fonction termine le service initialisé par WscrDdeServer(). Elle est exécutée normalement dans le fonction WscrEnd().
Voir également
WscrDdeServer()
Syntax
WscrDdeSetTimeOut(int msecs, int nbtries)
Description
Cette fonction détermine le schéma de gestion des TIMEOUT lors de requêtes au serveur DDE.
Les essais seront cumulatifs : premier essai avec nbsecs millisecondes d'attente, deuxième avec 2 * nbsecs ms d'attente, etc.
Par défaut, ces valeurs sont respectivement de 4000 msecs et 5 essais.
Voir également
WscrDdeConnect(), WscrDdeGet(), WscrDdeSet(), WscrDdeExecute()
File s_wddecl.c
HCONV WscrDdeConnect(szService, szTopic)
WscrDdeEnd(hConv)
WscrDdeExecute(Service, Topic, Cmd)
unsigned char* WscrDdeGet(szService, szTopic, szItem)
unsigned char* WscrDdeGetItem(hConv, szItem)
WscrDdeSet(szService, szTopic, szItem, ptr)
WscrDdeSetItem(hConv, szItem, ptr)
WscrDdeSetTimeOut(int msecs, int nbtries)
Syntax
unsigned char* WscrDdeGet(szService, szTopic, szItem)
char *szService, *szTopic, *szItem;
Description
Cette fonction établit une conversation avec un serveur, effectue une requête et coupe la conversation.
Valeur retournée
pointeur alloué vers le résultat de la requête ou NULL en cas d'erreur
Exemple
char *cells;
cells = WscrDdeGet("EXCEL", "Sheet2", "R2C2:R3C5");
...
SCR_free(cells);
Voir également
WscrDdeConnect(), WscrDdeSet()
Syntax
WscrDdeSet(szService, szTopic, szItem, ptr)
unsigned char *ptr;
char *szService, *szTopic, *szItem;
Description
Cette fonction établit une conversation avec un serveur, envoie des données au serveur et coupe la conversation.
Valeur retournée
0 en cas de succès, -1 en cas d'erreur
Exemple
char *cells;
cells = WscrDdeSet("EXCEL", "Sheet2", "R2C2:R2C2", "1.23");
...
SCR_free(cells);
Voir également
WscrDdeConnect(), WscrDdeGet()
Syntax
WscrDdeExecute(Service, Topic, Cmd)
char *Service, *Topic;
unsigned char *Cmd;
Description
Cette fonction établit une conversation avec un serveur DDE et exécute des fonctions de ce serveur. Elle permet par exemple de lancer Word ou Excel et de charger un fichier, de l'imprimer, puis de quitter le programme.
Valeur retournée
0 en cas de succès, -1 en cas d'erreur de connexion au serveur ou de retour erronné du serveur.
Exemple
PrintWordFile(char *filename)
{
char buf[256];
sprintf(buf, "[FileOpen \"%s\"]", filename);
WscrDdeExecute("winword", "system", buf);
sprintf(buf, "[FilePrintSetup .Printer = \"%s\"]", txt);
WscrDdeExecute("winword", "system", buf);
sprintf(buf, "[FilePrint .FileName = \"%s\"]", filename);
WscrDdeExecute("winword", "system", buf);
WscrDdeExecute("winword", filename, "[FileClose 2]");
}
Voir également
WscrDdeConnect(), WscrDdeGet(), WscrDdeSet()
Syntax
HCONV WscrDdeConnect(szService, szTopic)
char *szService, *szTopic;
Description
Cette fonction démarre une conversation avec un serveur DDE. Elle indique le service et le topic pour lesquels une ou des requêtes vont être effectuées.
Cette fonction doit être utilisée si plusieurs requêtes consécutives doivent être lancées. Si ce n'est pas le cas, on préfèrera les fonctions WscrDdeGet() et WscrDdeSet().
Valeur retournée
Handle de conversation qui devra être passé aux fonctions WscrDdeEnd(), WscrDdeGetItem() et WscrDdeSetItem().
Voir également
WscrDdeEnd(), WscrDdeGetItem() et WscrDdeSetItem()
Syntax
WscrDdeEnd(hConv)
HCONV hConv;
Description
Cette fonction termine une conversation démarrée par WscrDdeConnect().
Voir également
WscrDdeConnect(), WscrDdeGetItem() et WscrDdeSetItem()
Syntax
unsigned char* WscrDdeGetItem(hConv, szItem)
HCONV hConv;
char *szItem;
Description
Cette fonction interroge un serveur préalablement connecté par WscrDdeConnect() et demande l'information décrite dans szItem.
Valeur retournée
La valeur de retour est un pointeur alloué contenant la valeur demandée ou NULL en cas d'erreur.
Voir également
WscrDdeConnect(), WscrDdeSetItem(), WscrDdeEnd(), WscrDdeGet()
Syntax
WscrDdeSetItem(hConv, szItem, ptr)
HCONV hConv;
char *szItem;
unsigned char* ptr;
Description
Cette fonction envoie une donnée vers un serveur préalablement connecté par WscrDdeConnect().
Valeur retournée
0 en cas de succès, -1 en cas d'erreur
Voir également
WscrDdeConnect(), WscrDdeGetItem(), WscrDdeEnd(), WscrDdeSet()
Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be