toni93330
Messages postés9Date d'inscriptiondimanche 19 novembre 2006StatutMembreDernière intervention14 février 2009
-
23 janv. 2009 à 16:44
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 2012
-
26 janv. 2009 à 16:40
Bonjour,
je reviens avec d'autres problemes pour initialisé des structures.
voici les structures :
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public unsafe struct SHISDOS
{
public fixed sbyte numdos[ (int)typesize.LONGSIZE ]; /* 1 : numero dossier */
public fixed sbyte numlig [(int)typesize.LONGSIZE ]; /* 2 : numero de ligne */
public fixed sbyte date[(int)typesize.LONGSIZE]; /* 3 : date */
public fixed sbyte opera[(int)typesize.CHARSIZE * 8] ; /* 4 : code operation-document */
public fixed sbyte libell[(int)typesize.CHARSIZE * 28]; /*C_( libell[2], 28) 5 : 1..2 libelles */
public fixed sbyte libel2[(int)typesize.CHARSIZE * 28]; /*C_( libell[2], 28) 5 : 1..2 libelles */
public fixed sbyte montan[(int)typesize.DOUBLESIZE * 6]; /* 20 : 1..6 ht tva exo (Etude)
ht tva exo (Debou) */
/* 21 : montant ttc */
/* 29 : 1..6 ht tva exo (Etude)
Ex. dispo ht tva exo (Debou) */
public fixed sbyte zondos[(int)typesize.INTSIZE]; /* 7 : no zone dossier */
public fixed sbyte collab[(int)typesize.CHARSIZE * 3]; /* 8 : code collaborateur */
public fixed sbyte typhis[(int)typesize.CHARSIZE]; /* 9 : type d'historique */
/* O : Operation comptable */
/* C : Courrier */
/* A : Acte */
/* I : Calcul d'interet */
/* S : Message Serveur */
/* T : appel telephonique */
/* V : rendez-vous */
public fixed sbyte destin[(int)typesize.CHARSIZE * 10]; /* 10 : destinataire /banque */
public fixed sbyte gestio[(int)typesize.CHARSIZE]; /* 11 : Supp/Regu/Mult/Blanc */
public fixed sbyte marque[(int)typesize.CHARSIZE]; /* 12 : marquage utilisateur */
public fixed sbyte tpspas[(int)typesize.INTSIZE]; /* 13 : temps passe */
public fixed sbyte kilome[(int)typesize.INTSIZE]; /* 14 : kilometres parcourus */
public fixed sbyte determ[(int)typesize.CHARSIZE]; /* 15 : action determinante o/n */
public fixed sbyte ctitre[(int)typesize.CHARSIZE * 3]; /* 16 : code titre */
public fixed sbyte numfac[(int)typesize.LONGSIZE]; /* 17 : numero de facture */
public fixed sbyte numgrp[(int)typesize.LONGSIZE]; /* 18 : numero de groupe */
public fixed sbyte numtva[(int)typesize.INTSIZE]; /* 19 : indice tva */
public fixed sbyte datcpt[(int)typesize.LONGSIZE]; /* 25 : date de comptabilisation*/
public fixed sbyte devise[(int)typesize.CHARSIZE]; /* 26 : monnaie: F=francs,E=euro*/
public fixed sbyte valdev[(int)typesize.DOUBLESIZE * 3]; /* 27 : valeur devise ht,tva,exo*/
public fixed sbyte numrec[(int)typesize.LONGSIZE]; /* 28 : numero de reçu */
public fixed sbyte facture[(int)typesize.LONGSIZE]; /* 31 : numero de facture */
}
public unsafe struct TABLE
{ /* structure table de l'editeur */
char *adr;
char *champs;
char *namexml;
byte typ;
short lg;
char *format;
short rang;
char used;
}
public unsafe struct TFIC
{ /* structure tableau fichier des tables pour Z1 */
public char *code;
public TABLE *ftable; ERREUR
public short indice_max;
public short nfic; /* Identificateur du fichier */
public char *buffer; /* Adresse du buffer */
public byte type; /* Code indiquant si type enreg. multiple */
// int (*fonction)(LIST_ITEM **, int, XmlWriter writer,Int32, char); /* Adresse d'une fonction specifique */
}
public SHISDOS hisdos;
unsafe public void init()
{
TABLE WTHD = new TABLE();
WTHD.adr = &hisdos.numdos;
}
la creation de TABLE WTHD est correct mais je n'est pas accés aux champs de la TABLE, comment faire et comment initialiser les champs avec la table SHISDOS ?
Merci pour votre aide
toni93330
Messages postés9Date d'inscriptiondimanche 19 novembre 2006StatutMembreDernière intervention14 février 2009 26 janv. 2009 à 11:19
Bonjour,
Merci pour la réponse, j'avais essayé mais sans initialisé la structure hisdos et j'avais une erreur de compil.
Donc, si je comprend bien, on ne peut pas pointé sur une autre adresse tant que celle-ci n'est pas renseigné ?
Le new sert a quoi dans ce cas la ? car cela ne m'arrange pas .A moins d'initialisé tous mes champs de la structure hisdos avec null cela pourrait-il marché ?
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 26 janv. 2009 à 16:40
C# n'autorise pas l'utilisation d'une struct avant que tous ses champs soit initialisés, 2 solutions pour ça.. initialiser chaque champ un part un ou utiliser l'opérateur new, qui contrairement au C++ ne va pas allouer de l'espace sur le tas mais simplement faire un ZeroMemory ( mettre tous ses champs à 0 ) car une struct est "un type valeur" et allouée ( ou pas ) avec new elle restera sur la pile.