Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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:45]
thierry [Mémoire partagée]
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 71: Ligne 82:
 end.                                  end.                                 
 </​code>​ </​code>​
-==== Titre ====+==== Le Client ​==== 
 +Cette unité contient le code du client.\\ 
 +C'est un ''​TForm''​ avec un ''​TMemo''​ et un ''​TTimer''​.\\ 
 +Toutes les secondes il accéde a la mémoire partagé et affiche son contenu dans le ''​TMemo''​
  
 <code delphi uFormClient.pas>​ <code delphi uFormClient.pas>​
Ligne 92: Ligne 106:
 type type
  
 +  // La structure qui sera échangée entre les deux applications
   TDatas = packed record   TDatas = packed record
     Text: shortstring;​     Text: shortstring;​
Ligne 138: 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 153: Ligne 170:
 type type
  
 +  // Structure de données partagée
   TDatas = packed record   TDatas = packed record
     Text: shortstring;​     Text: shortstring;​
Ligne 197: 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);​