WIP: SV_DLL_WIN #17
No reviewers
Labels
No Label
bug
duplicate
enhancement
help wanted
independant
invalid
module/autre
module/backend
module/desktop
module/docs
module/frontend
module/scripts
module/sesam-vitale
module/utils
open-source
question
to-triage
wontfix
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: P4Pillon/Krys4lide#17
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "SV_DLL_WIN"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
@ -4,3 +4,4 @@ version = "0.1.0"
edition = "2021"
[dependencies]
winapi = { version = "0.3.8", features = ["winuser","libloaderapi"] }
Comme évoqué sur Matrix, prend plutôt inspiration sur l'exemple crossplatform ici : https://forge.p4pillon.org/P4Pillon/Krys4lide/src/branch/wip-debug-lib-c pour ne pas avoir besoin de winapi
lorsque je déclare mes accès à la dll avec la syntaxe
"extern "C" {
fn SSV_InitLIB2(pcRepSesamIni: *const c_char) -> c_ushort; ..." ,
j'ai ce problème que je n'ai pas de fichier .lib
= note: LINK : fatal error LNK1181: impossible d'ouvrir le fichier en entrée 'C:\ProgramFiles\santesocial\fsv\1.40.14\lib\ssvw64.dll.lib'
d'où l'utilisation de winapi
Est ce que tu as bien suivi les étapes du README de l'exemple ?
Car y'a des chemins à définir dans le path, et des chemins en fichier de config utilisés par le compilateur
@ -0,0 +19,4 @@
while current_pos_general < bytes.len() - 1 {
num_champ = 0;
current_groupe = 256 * bytes[current_pos_general] as i32 + bytes[current_pos_general + 1] as i32;
Je te conseille de sortir tous les bouts de codes "un peu compliqué", comme cette ligne par exemple, dans des fonctions, pour gagner en lisibilité :
Par exemple :
ça m'est égal, il me parait un peu too much de faire des fonctions pour remplacer une ligne de code
L'enjeu, c'est d'avoir une bonne lisibilité du code, à long terme, pour l'ensemble des dev.
Donc ça peut s'obtenir autrement que par le découpage ; à minima par des commentaires
Mais ici, je crois qu'on gagnerait à découper certaines fonctions, car on pourrait leur mettre des tests unitaires et car on aura sans doute besoin y nouveau de décalage de bits?
oui je crois des commentaires pourrait suffire dans ce cas,
C'est une traduction du code VB.Net bien aidé par l'IA, d'où l'absence de commentaire.
Je ferai le nécessaire pour rendre le code lisible. J'ai plutôt pour habitude de copier coller des parties de code lorsque c'est juste quelques fois,
Pour info, lorsqu'on aura programmer les quelques décodage de zone mémoire nécessaires, je garanti qu'on n'y reviendra pas.
@ -0,0 +32,4 @@
current_pos_general += 1;
acc + (256_i32.pow(i as u32) * bytes[current_pos_general] as i32) as usize
});
}
Idem ici, on peut extraire tout ce bloc dans une fonction dédiée, pour clarifier le code :
@ -0,0 +67,4 @@
6 => println!("Groupe1.Champ6: {}", String::from_utf8_lossy(&bytes_champ)),
7 => println!("Groupe1.Champ7: {}", String::from_utf8_lossy(&bytes_champ)),
8 => println!("Groupe1.Champ8: {}", String::from_utf8_lossy(&bytes_champ)),
_ => (),
Et l'idéal, ici, serait de stocker ces valeurs dans une structure appropriée, en nommant + explicitement les champs, et éventuellement en les typant de manière + appropriée que juste un String ?
des que tu es dispo je te montrerai ce que j'avais fait en vb.
J'avais déclaré des classes avec des properties qui permettaient de bien "jouer" avec tous les éléments. (et même d'avoir des displayName)
exemple pour une date
Public Property Champ1 As String (Date mise au format « AAAAMMJJ0000)
Public Property Date_de_début_droits_AMO As Nullable(Of Date)
le set de l'un fixe la valeur de l'autre
(et c'est là que Rust qui ne gère pas les classes me parait limite, pour une programmation orientée objet la gestion de classes serait à mon sens bien plus importante que la gestion optimale de la mémoire dont on ne manquera pas, alors certes on trouvera des solutions avec des struct et des impl et des trait, mais quelle galère.... )
Pas de soucis pour faire ce genre de chose en Rust, car on peut faire des choses de type Programmation objet
Dans la doc & formation Rust c'est les concepts de Structure, de Templates et de Traits
On peut se faire une session de pair programming pour implémenter ça :)
j'aurais bien besoin d'une session formation sur l'environnement de dev qui est bien plus compliqué que ce que j'ai l'habitude de mettre en place.
par exemple là, je ne sais pas tester wip-debug-libc...
Pour les concepts de Structure, de Templates et de Traits, je crois que je devrais m'en sortir quand on se sera mis d'accord sur la méthode. On pourrait commencer ensemble pour que je sois sûr que je vais dans la bonne direction et je voudrais bien voire avec toi si tu valides les concepts que j'avais mis en place dans ma programmation .Net
Donc pour se faire, on pourrait se faire du pair programming des que tu es dispo
(mais si besoin je pourrais aussi me déplacer d'ici dix à quinze jours)
Ça roule ; par contre, possible que j'ai pas trop de temps avant la semaine prochaine
@ -4,0 +23,4 @@
println!("Taille sortie SSV_LireCartePS : {}", TTailleDonneesSortie);
println!("ZDonneesSortie: {:?}", ZDonneesSortie);
CPS::decode_zone_memoire(ZDonneesSortie,TTailleDonneesSortie)
Est-ce que tu pourrais fournir, dans un fichier d'exemple, un exemple de ZDonneesSortie et TTailleDonneesSortie ? Comme ça on pourrait travailler sur le code, même sans avoir le lecteur de carte
Est-ce que tu peux faire avec ça?
les valeurs sont en decimale
Taille sortie SSV_LireCartePS : 140
ZDonneesSortie: 0x1e75ad4cc40
Octet: 0
Octet: 1
Octet: 51
Octet: 1
Octet: 48
Octet: 1
Octet: 56
Octet: 11
Octet: 57
Octet: 57
Octet: 55
Octet: 48
Octet: 48
Octet: 53
Octet: 50
Octet: 52
Octet: 49
Octet: 57
Octet: 52
Octet: 1
Octet: 52
Octet: 2
Octet: 50
Octet: 50
Octet: 17
Octet: 80
Octet: 72
Octet: 65
Octet: 82
Octet: 77
Octet: 65
Octet: 67
Octet: 73
Octet: 69
Octet: 78
Octet: 48
Octet: 48
Octet: 53
Octet: 50
Octet: 52
Octet: 49
Octet: 57
Octet: 9
Octet: 70
Octet: 82
Octet: 65
Octet: 78
Octet: 67
Octet: 79
Octet: 73
Octet: 83
Octet: 69
Octet: 1
Octet: 84
Octet: 0
Octet: 2
Octet: 83
Octet: 1
Octet: 1
Octet: 1
Octet: 48
Octet: 1
Octet: 49
Octet: 2
Octet: 56
Octet: 54
Octet: 1
Octet: 49
Octet: 9
Octet: 48
Octet: 66
Octet: 48
Octet: 50
Octet: 50
Octet: 49
Octet: 57
Octet: 53
Octet: 56
Octet: 1
Octet: 56
Octet: 24
Octet: 80
Octet: 72
Octet: 65
Octet: 82
Octet: 77
Octet: 65
Octet: 67
Octet: 73
Octet: 69
Octet: 32
Octet: 68
Octet: 85
Octet: 32
Octet: 67
Octet: 69
Octet: 78
Octet: 84
Octet: 82
Octet: 69
Octet: 50
Octet: 50
Octet: 49
Octet: 57
Octet: 53
Octet: 8
Octet: 48
Octet: 48
Octet: 50
Octet: 48
Octet: 50
Octet: 52
Octet: 49
Octet: 57
Octet: 1
Octet: 56
Octet: 0
Octet: 1
Octet: 48
Octet: 1
Octet: 49
Octet: 2
Octet: 53
Octet: 48
Octet: 2
Octet: 49
Octet: 48
Octet: 2
Octet: 48
Octet: 48
Octet: 1
Octet: 48
Octet: 1
Octet: 48
Octet: 1
Octet: 48
Octet: 1
Octet: 49
Octet: 1
Octet: 49
Oui, ça va le faire :)
Je pousserais un bout de code intégrant ça
@ -0,0 +1,35 @@
// use std::ffi::CString;
Pull request closed