PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Problème récupération de données d'une DLL
Problème récupération de données d'une DLL
Débuté par Yann H., 15 aoû. 2017 16:57 - 1 réponse
Posté le 15 août 2017 - 16:57
Bonjour,
Je rencontre un petit problème lors de la récupération d'une structure d'une dll en c vers windev.
La taille de mes structures est identique sous c et sous windev.

J'ai l'impression que mon tableau de st2 ne se remplit pas entièrement.

Code C :
typedef struct _St1 {
    uint32_t compressed_len_aligned;
    uint32_t compressed_len;
    uint32_t real_len;
    uint32_t pos;

    #define DIR_SZFILE 0x0714
    #define DIR_SZSMALL 0x0449
    #define DIR_SZORIG 0x055C
    #define DIR_OFFSET 0x058A

    uint8_t flags;

    #define FLAG_FILE 0x01
    #define FLAG_MIXCRYPT 0x02
    #define FLAG_0x14_DES 0x04

    uint32_t hash;
    char name[0x100];

    char *data;
    struct _St1 *next;
    struct _St1 *prev;
} St1;

 typedef struct {
char *filename;
uint32_t len;
uint32_t type;
uint32_t version;
uint32_t nfiles;

St1 *files;
St1 *first;
St1 *last;

uint8_t allowCrypt;
FILE *f;
uint8_t allowWrite;
void *zbuf;

} St2;


Code Windev :
st1 est une structure
compressed_len_aligned est un entier
compressed_len est un entier
real_len est un entier
pos est un entier
flags est un entier
hash est un entier
name est une chaîne ASCIIZ sur 0x100
Data est un entier système
next est un entier
prev est un entier
FIN

st2 est une structure
filename est un entier système
len est un entier
type est un entier
version est un entier
nfiles est un entier
files est un entier système
first est un entier
last est un entier
allowCrypt est un entier
f est un entier
allowWrite est un entier
zbuf est un entier
FIN

nPtr est un entier système
stStruct est un st2
tt est un st1

SI ChargeDLL("zer.dll") <> 0 ALORS

nPtr = API("ZER", "zer_open","test.zer","rb",Null,Null)
Transfert(&stStruct,nPtr,Dimension(stStruct))
tabFic est un tableau locallocal de stStruct.nfiles st1
Transfert(&tabFic,stStruct:files,Dimension(tabFic))
// tabFic ne semble pas s’être correctement remplit.
POUR TOUT tt de tabFic
Trace("adresse fichier : "+tt.name)
FIN
API("ZER", "zer_close",nPtr)

FIN
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 16 août 2017 - 11:19
Bonjour
Avez-vous testé en typant plus précisément les variables ?
st1 est une structure
compressed_len_aligned est un entier sans signe sur 4 octets
compressed_len est un entier sans signe sur 4 octets
real_len est un entier sans signe sur 4 octets
pos est un entier sans signe sur 4 octets
flags est un entier sans signe sur 1 octets
hash est un entier sans signe sur 4 octets
name est une chaîne fixe sur 0x100
Data est un entier système
next est un entier système
prev est un entier système
END

st2 est une structure
filename est un entier système
len est un entier sans signe sur 4 octets
type est un entier sans signe sur 4 octets
version est un entier sans signe sur 4 octets
nfiles est un entier sans signe sur 4 octets
files est un entier système
first est un entier système
last est un entier système
allowCrypt est un entier sans signe sur 1 octets
f est un entier système
allowWrite est un entier sans signe sur 1 octets
zbuf est un entier système
END
Message modifié, 16 août 2017 - 11:21