Présentation
Documentation
L'équipe
Sérialisation
 
Programmes
Objets
Libs Utilitaires
Libs Internes
   
 
Editeur
Syntaxes
Windows
Versions
   

SCR/AL1 - TOME III. Les librairies utilitaires

22. Le groupe s_ipc

22.2 Serveur et client DDE

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

22.2.1 WscrDdeServer (file s_wddesr.c:148)

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()

22.2.2 WscrDdeServerEnd (file s_wddesr.c:193)

Syntax

WscrDdeServerEnd()

Description

Cette fonction termine le service initialisé par WscrDdeServer(). Elle est exécutée normalement dans le fonction WscrEnd().

Voir également

WscrDdeServer()

22.2.3 WscrDdeSetTimeOut (file s_wddecl.c:26)

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)

22.2.4 WscrDdeGet (file s_wddecl.c:230)

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()

22.2.5 WscrDdeSet (file s_wddecl.c:266)

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()

22.2.6 WscrDdeExecute (file s_wddecl.c:64)

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()

22.2.7 WscrDdeConnect (file s_wddecl.c:295)

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()

22.2.8 WscrDdeEnd (file s_wddecl.c:106)

Syntax

WscrDdeEnd(hConv)
HCONV hConv;

Description

Cette fonction termine une conversation démarrée par WscrDdeConnect().

Voir également

WscrDdeConnect(), WscrDdeGetItem() et WscrDdeSetItem()

22.2.9 WscrDdeGetItem (file s_wddecl.c:128)

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()

22.2.10 WscrDdeSetItem (file s_wddecl.c:181)

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