IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

C Struct >> C# : Besoin d'aide


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 103
    Par défaut C Struct >> C# : Besoin d'aide
    Bonjour,

    Voici un exemple de structure en C que j'aimerai coder en C#. En fait mon idée est de faire une application capable de parser les mini-dumps de microsoft. Je travaille sur PocketPC et je génère souvent des KDMPs (mini dump) donc j'aimerai pouvoir les classer par ordre de priorité suivant le process qui crashe, ou encore la fonction appelée qui pose problème etc.

    Voici la structure qui m'intéresse (http://msdn.microsoft.com/en-us/library/ms939646.aspx):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    typedef struct _MINIDUMP_HEADER {
      ULONG32 Signature;
      ULONG32 Version;
      ULONG32 NumberOfStreams;
      RVA StreamDirectoryRva;
      ULONG32 CheckSum;
      union
      {
          ULONG32 Reserved;
          ULONG32 TimeDateStamp;
      };
      ULONG64 Flags;
    } MINIDUMP_HEADER, *PMINIDUMP_HEADER;
    Voila un début de conversion en C# mais ne connaissant pas le C, je suis très limité:
    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
     
    public struct MINIDUMP_HEADER {
      UInt32 Signature;
      UInt32 Version;
      UInt32 NumberOfStreams;
      int StreamDirectoryRva; // RVA = int (?)
      UInt32 CheckSum;
      [System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
    struct Union
      {
          [System.Runtime.InteropServices.FieldOffset(0)]
          UInt32 Reserved;
          [System.Runtime.InteropServices.FieldOffset(0)]
          UInt32 TimeDateStamp;
      }
      UInt64 Flags;
    }
    Je ne sais pas vraiment que vient faire le pointeur *PMINIDUMP_HEADER et je ne connais pas vraiment ce qu'est une union par rapport à une structure ... (apparemment ce serait que Reserved et TimeDateStamp seraient inscrit à la même adresse mémoire ?? Donc en fait une seule valeur serait accessible à la fois : Reserved ou TimeDateStamp ?) .

    Si quelqu'un peut me donner un coup de main (pas de pied... ça fait trop mal ), ça serait simpa.


    Merci d'avance !
    AlnCool

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par alncool Voir le message
    Je ne sais pas vraiment que vient faire le pointeur *PMINIDUMP_HEADER
    Pas besoin de t'en préoccuper, c'est juste un raccourci syntaxique pour dire que le type PMINIDUMP_HEADER représente un pointeur vers une structure MINIDUMP_HEADER.


    Citation Envoyé par alncool Voir le message
    je ne connais pas vraiment ce qu'est une union par rapport à une structure ... (apparemment ce serait que Reserved et TimeDateStamp seraient inscrit à la même adresse mémoire ?? Donc en fait une seule valeur serait accessible à la fois : Reserved ou TimeDateStamp ?)
    C'est à peu près ça. Mais en fait tu n'as pas besoin de déclarer une nouvelle structure Union pour ça (ou si tu le fais, il faut déclarer un champ de type Union dans MINIDUMP_HEADER).

    Pour RVA, je sais pas trop ce que c'est, mais d'après la doc, il s'agit d'un pointeur, donc a priori tu peux utiliser le type IntPtr.

    En fait je pense que le mieux serait de déclarer explicitement tout le layout de la structure :

    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
    [System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
    public struct MINIDUMP_HEADER {
      [System.Runtime.InteropServices.FieldOffset(0)]
      UInt32 Signature;
      [System.Runtime.InteropServices.FieldOffset(4)]
      UInt32 Version;
      [System.Runtime.InteropServices.FieldOffset(8)]
      UInt32 NumberOfStreams;
      [System.Runtime.InteropServices.FieldOffset(12)]
      IntPtr StreamDirectoryRva; // RVA = int (?)
      [System.Runtime.InteropServices.FieldOffset(16)]
      UInt32 CheckSum;
      [System.Runtime.InteropServices.FieldOffset(20)]
      UInt32 Reserved;
      [System.Runtime.InteropServices.FieldOffset(20)]
      UInt32 TimeDateStamp;
      [System.Runtime.InteropServices.FieldOffset(24)]
      UInt64 Flags;
    }

Discussions similaires

  1. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  2. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29
  3. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo