Bonjour,
J'essaie de comprendre une fonctionnalité d'un programme qu'il y a sur ce site.
https://www.sierrachart.com/index.ph...tPersistentInt
Ici, cette ou ces fonctions arrivent à stocker en mémoire machine de manière permanente, une donnée et sa clé pointeur.
J'ai testé leur fonction en via un cpp que j'ai fait.
Cela fonctionne bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 #include "sierrachart.h" #include "scstudyfunctions.h" #include <iterator> #include <iostream> #include <vector> SCDLLName("Test") SCSFExport scsf_Test(SCStudyInterfaceRef sc) { SCSubgraphRef Red=sc.Subgraph[0],Ble=sc.Subgraph[1]; if(sc.SetDefaults){ sc.GraphName="Test"; sc.GraphRegion=0; sc.AutoLoop=true; sc.FreeDLL=1; Red.Name="Rouge"; Red.DrawStyle=DRAWSTYLE_VALUE_ON_HIGH; Red.PrimaryColor=RGB(255,0,0); Red.DrawZeros=true; Red.GraphicalDisplacement=0; Ble.Name="Bleu"; Ble.DrawStyle=DRAWSTYLE_VALUE_ON_LOW; Ble.PrimaryColor=RGB(0,128,255); Ble.DrawZeros=true; Ble.GraphicalDisplacement=0; }/*fin de default*/ int& Door = sc.GetPersistentInt(0); int& Size = sc.GetPersistentInt(1); if((Door == 0)&&(sc.Index == 0)){ Door = 0; Size+=1; } else if((Door < sc.Index)&&(sc.Index >=1)){ Door=sc.Index; Size+=1; } else{} if(Size >= 1){ Red[sc.Index] = Door; Ble[sc.Index] = Size; } if(Size >= 10){ sc.GetPersistentInt(1) = 0; /*OU Size = 0;*/ } }
J'ai même réussi à sauver un tableau "VECTOR".
Maintenant, je souhaiterai comprendre comment cela est construit en c++
Si je comprends, la méthode utilisée.
La donnée est maintenu en mémoire par la sauvegarde de sa clé pointeur en mémoire elle aussi.
Et les deux sont permanentes ou persistentes.
Dans leur bibliothèque sierrachart.h j'ai touvé cela, rien de plus.
Pour éviter une fuite mémoire des données ils ont des fonctions qui permettent d’effacer la donnée la
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int& ((SCDLLCALL* GetPersistentInt)(int Key)); void ((SCDLLCALL* SetPersistentInt)(int Key, int Value));
donnée et le pointeur en mémoire.
Cela fonctionne bien. (Voir CPP ci-dessus)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 sc.GetPersistentInt(1) = 0;
Mais comment on fait pour sauvegarder une clé, une donnée, un tableau de données, en mémoire permanente ?
Existe-il une bibliothèque en c++ pour le faire ?
Quelqu'un peut-il m'apprendre à le faire en c++ ?
Avez-vous un script exemple pour apprendre ?
Merci d'avance.
Partager