Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
prog:lazarus:cas:processus:shared_memory [12/03/2023 16:48] thierry [Titre] |
prog:lazarus:cas:processus:shared_memory [12/03/2023 17:21] (Version actuelle) thierry [Mémoire partagée] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Mémoire partagée ====== | ====== Mémoire partagée ====== | ||
+ | Ma problématique est de faire communiquer deux applications différentes (sur le même PC) entre elles... | ||
+ | |||
+ | Voici quelques pistes : | ||
===== Utilisation d'une classe TTICSharedMemory ===== | ===== Utilisation d'une classe TTICSharedMemory ===== | ||
+ | Ci dessous un exemple de données partagées entre deux applications Windows.\\ | ||
+ | Un serveur avec un ''TEdit'', qui modifie la mémoire partagé dés qu'on modifie la valeur du ''TEdit''.\\ | ||
+ | Un Client, qui affiche toutes les secondes la valeur de la donnée partagée. | ||
==== uTICSharedMemory ==== | ==== uTICSharedMemory ==== | ||
Cette unité contient le code de l'object TTICSharedMemory | Cette unité contient le code de l'object TTICSharedMemory | ||
Ligne 26: | Ligne 32: | ||
procedure FreeHandle; | procedure FreeHandle; | ||
public | public | ||
+ | // AName = l'identifiant du fichier partagé en mémoire | ||
+ | // ASize = la taille totale des données partagées | ||
constructor Create(AName: PChar; ASize: integer); | constructor Create(AName: PChar; ASize: integer); | ||
+ | | ||
destructor Destroy; override; | destructor Destroy; override; | ||
property LastError: DWord read FLastError; | property LastError: DWord read FLastError; | ||
+ | |||
+ | // Pointer = l'adresse de la donnée partagée | ||
property Pointer: pointer read FPointer; | property Pointer: pointer read FPointer; | ||
end; | end; | ||
Ligne 142: | Ligne 153: | ||
end. | end. | ||
</code> | </code> | ||
- | ==== Titre ==== | + | ==== Le Serveur ==== |
+ | Un ''TForm'' contenant un ''TEdit''.\\ | ||
+ | Dés que l'on modifie le ''TEdit'' il met a jour la mémoire partagée. | ||
<code delphi uFormServer.pas> | <code delphi uFormServer.pas> | ||
Ligne 157: | Ligne 170: | ||
type | type | ||
+ | // Structure de données partagée | ||
TDatas = packed record | TDatas = packed record | ||
Text: shortstring; | Text: shortstring; | ||
Ligne 201: | Ligne 215: | ||
procedure TFormServer.Edit1Change(Sender: TObject); | procedure TFormServer.Edit1Change(Sender: TObject); | ||
begin | begin | ||
+ | // Modification de la mémoire partagée | ||
FPDatas^.Text:=Edit1.Text+#0; | FPDatas^.Text:=Edit1.Text+#0; | ||
FPDatas^.Size:=length(Edit1.Text); | FPDatas^.Size:=length(Edit1.Text); |