|
|
|
|
- Gestion du mode de partage
- Correspondance entre le nom fourni à fMemOuvre et l'ouverture en C
- Gestion des zones mémoires au format UNICODE
- Positionnement dans la zone de mémoire partagée
- Fermeture de la zone de mémoire partagée
fMemOuvre (Fonction) En anglais : fMemOpen Ouvre une zone de mémoire partagée entre plusieurs applications. Le contenu de la zone mémoire peut ensuite être manipulé par les fonctions fPositionne, fLit et fEcrit. // Création/Ouverture d'une zone mémoire partagée entre applications (1ère application) tabIDZone est un tableau associatif d'entiers IDZone1 est un entier IDZone1 = fMemOuvre("MaZonePartagée", 1024, partageGlobal, ... foLectureEcriture, ProcédureModification) tabIDZone["MaZonePartagée"] = IDZone1 ... // Création/Ouverture d'une zone mémoire partagée // entre applications (2ème application) - // pas de callback IDZone2 est un entier IDZone2 = fMemOuvre("MaZonePartagée", 1024, partageGlobal) // Ecriture dans la zone mémoire partagée fEcrit(IDZone2, "Bonjour, je suis une application WINDEV !") ... // L'écriture par la 2ème application déclenche // l'appel de la procédure dans la 1ère application
// ------------------------- // Procédure appelée à chaque modification de la zone mémoire partagée PROCÉDURE ProcédureModification(NomZoneNotif est une chaîne) ChaîneModifiée est une chaîne ChaîneModifiée = fLit(tabIDZone[NomZoneNotif], 1024) Trace(ChaîneConstruit("La chaîne %1 a été écrite dans la zone %2", ChaîneModifiée, NomZoneNotif))
Syntaxe
<Résultat> = fMemOuvre(<Zone mémoire> , <Taille> [, <Partage> [, <Mode d'ouverture> [, <Procédure WLangage>]]])
<Résultat> : Entier - Identifiant de la zone mémoire.
Cet identifiant peut être manipulé par les fonctions fxxx de la même façon qu'un identifiant de fichier externe renvoyé par fOuvre. - -1 en cas d'erreur.
<Zone mémoire> : Chaîne de caractères Nom de la zone de mémoire partagée à créer ou à ouvrir. Ce nom doit être le même dans les différentes applications accédant à la zone. Si la zone n'existe pas, elle est automatiquement créée.
<Taille> : Entier Taille minimale de la zone de mémoire partagée en octets.- Si la zone existe déjà :
- si <Taille> vaut 0 : ce paramètre est ignoré et la taille de la zone peut être obtenue par la fonction fTaille.
- si <Taille> est différent de 0 :
- si <Taille> est trop grand, la fonction fMemOuvre renvoie -1.
- la zone mémoire existante est ouverte avec une taille au moins égale au paramètre (la taille effective est déterminée par le système d'exploitation et peut être connue grâce à la fonction fTaille).
- Si la zone n'existe pas, elle est créée avec une taille au moins égale au paramètre (la taille effective est déterminée par le système d'exploitation et peut être connue grâce à la fonction fTaille).
<Partage> : Constante optionnelle de type Entier Mode de partage de la zone entre les sessions utilisateurs : | | partageGlobal | La zone est partagée avec toutes les applications de toutes les sessions de la machine. | partageUtilisateur (Valeur par défaut) | La zone est partagée avec toutes les applications de la session de l'utilisateur. |
<Mode d'ouverture> : Constante optionnelle de type Entier Constantes permettant de définir le mode d'accès à la zone de mémoire partagée. | | foEcriture | Ouverture de la zone en "écriture seule". Il sera uniquement possible d'écrire dans cette zone. | foLecture | Ouverture de la zone en "lecture seule". Il sera uniquement possible de lire dans cette zone.Si cette constante est utilisée, pour changer le mode d'ouverture de la zone mémoire, il est nécessaire de fermer la zone mémoire (fonction fFerme) avant de la réouvrir avec un mode d'ouverture différent. | foLectureEcriture (Valeur par défaut) | Ouverture de la zone en "lecture/écriture". Il sera possible de lire et de modifier cette zone. | foUnicode | Ouverture d'un fichier au format UNICODE. (Voir Notes pour plus de détails) |
<Procédure WLangage> : Nom de procédure Nom de procédure WLangage ("callback") qui sera appelée automatiquement si la zone mémoire est modifiée par une autre application en WLangage. Cette procédure est de la forme :
PROCEDURE <Nom de la procédure>(<Nom de la zone>) Le paramètre de cette procédure est optionnel. Il doit être utilisé dans le cas où une unique callback est utilisée pour recevoir les notifications de plusieurs zones de mémoire partagées. Le paramètre <Nom de la zone> sera préfixé par la chaîne "Global\" si la zone a été créée avec la constante partageGlobal et par la chaîne "Local\" si la zone a été créée avec la constante partageUtilisateur. Remarques Gestion du mode de partage Selon les versions des systèmes d'exploitation, le mode de partage diffère : - Windows Vista et postérieur : le paramètre <Partage> de la fonction fMemOuvre est géré. Les services sont dans un espace différent des utilisateurs. Pour partager une zone mémoire entre un service et une application dans la session d'un utilisateur, il faut utiliser la constante partageGlobal.
- En Terminal Serveur : le paramètre <Partage> de la fonction fMemOuvre est géré. Chaque session ouverte sur le Terminal Serveur a un espace de mémoire différent. Des applications lancées dans la même session TSE peuvent partager une zone mémoire créée avec la constante partageUtilisateur. Des applications situées dans des sessions différentes peuvent partager une zone de mémoire partagée créée avec la constante partageGlobal.
- Windows : Pour accéder à une zone de mémoire Globale en écriture ou en lecture, il est nécessaire d'avoir les droits d'administrateur.
Gestion des zones mémoires au format UNICODE La fonction fMemOuvre permet de lire et d'écrire des zones mémoires au format UNICODE "UTF-16" ou "little endian". En ouverture, la marque "Unicode courant" (FFFE) est automatiquement lue. En création, elle est automatiquement ajoutée. Remarque : Le mécanisme de rappel automatique d'une procédure WLangage à chaque modification de la zone de mémoire par une autre application ne fonctionne que entre des applications en WLangage. Positionnement dans la zone de mémoire partagée A l'ouverture d'une zone de mémoire partagée, la position en cours correspond au premier octet de la zone. Cette position peut être modifiée par la fonction fPositionne. Fermeture de la zone de mémoire partagée Lorsque l'application n'a plus besoin d'accéder à la zone de mémoire partagée, l'accès peut être fermé à l'aide de la fonction fFerme. La zone est effectivement détruite une fois que la dernière application y accédant a refermé la zone. Si aucun appel explicite à la fonction fFerme n'est présent dans le code de l'application, la fermeture sera faite automatiquement à la terminaison de l'application. Composante : wd290std.dll
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|