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

 Delphi Discussion :

Problème violation d'accès


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 73
    Points : 53
    Points
    53
    Par défaut Problème violation d'accès
    Bonjour,

    Je reviens à nouveau vers vous pour un problème de violation d'accès,

    c'est très pénible car ce n'est pas un problème de programmation à proprement parler mais plutôt d'implémentation du code, je suis toujours bloqué par des choses basiques par exemple les implémentations de procédures, déclaration de variables, où les placer dans le code etc.... je suis autodidacte et malgré les docs disponibles, je bataille....

    donc là , j'ai un code qui me renvoi la liste des processus lancés dans un memo,
    rien de bien compliqué, cela fonctionne très bien quand j'inclue le code dans la procédure FormCreate,

    une fois placé dans une procédure, et appel dans le FormCreate , j'obtiens le message d'erreur violation d'accès,

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    unit Unit1;
     
    interface
     
    uses
     
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,TLHelp32, StdCtrls;
     
    type
     
        TForm1 = class(TForm)
        Memo1: TMemo;
     
     
        procedure FormCreate(Sender: TObject);
     
    private
        { Déclarations privées }
    public
        { Déclarations publiques }
     
      end;
     
    var
      Form1: TForm1;
      MyHandle: THandle;
      Struct: TProcessEntry32;
     
     
     
     
    implementation
     
    {$R *.dfm}
     
    procedure sniff();
     
     
    var Memo1: TMemo;
     
     
     
    begin
     
    try
     
    MyHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
    Struct.dwSize:=Sizeof(TProcessEntry32);
     
    if Process32First(MyHandle, Struct) then
    memo1.lines.Add(Struct.szExeFile);
     
    while Process32Next(MyHandle, Struct) do
    memo1.lines.Add(Struct.szExeFile);
     
    except on exception do
    ShowMessage('Erreur');
     
    end;
     
     
    end;
     
     
    procedure TForm1.FormCreate(Sender: TObject);
     
     
     
     
     
    begin
     
     
     sniff();
     
     
     
     
     
     end;
     
     
    end.
    Code sans la procédure qui fonctionne :


    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    unit Unit1;
     
    interface
     
    uses
     
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,TLHelp32, StdCtrls;
     
    type
     
        TForm1 = class(TForm)
        Memo1: TMemo;
     
     
        procedure FormCreate(Sender: TObject);
     
    private
        { Déclarations privées }
    public
        { Déclarations publiques }
     
      end;
     
    var
      Form1: TForm1;
      MyHandle: THandle;
      Struct: TProcessEntry32;
     
     
     
     
     
    implementation
     
    {$R *.dfm}
     
     
     
    procedure TForm1.FormCreate(Sender: TObject);
     
    begin
     
    try
     
    MyHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
    Struct.dwSize:=Sizeof(TProcessEntry32);
     
    if Process32First(MyHandle, Struct) then
    memo1.lines.Add(Struct.szExeFile);
     
    while Process32Next(MyHandle, Struct) do
    memo1.lines.Add(Struct.szExeFile);
     
    except on exception do
    ShowMessage('Erreur');
     
    end;
     
     
     
    end;
     
     
    end.
    De plus , pourquoi faut-il que j'ajoute var Memo1: TMemo; alors qu'il est dans mes Type ???

    Merci à vous d'avance, et ....si vous avez des docs à me conseiller pour apprendre correctement, je suis preneur !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 393
    Points : 637
    Points
    637
    Par défaut
    dans ta procedure tu ne dois pas utiliser Memo1 mais Form1.Memo1 tu verras alors que tu n'auras pas besoin de redéclarer memo1

    tu devrais passer en paramètre ton TMemo cela sera un peu plus propre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure sniff(const Memo:TMemo);
    begin
     Memo.lines.add('test');
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     sniff(Memo1);
    end;

  3. #3
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    Bonjour,

    on peut aussi ajouter la procédure snif à la déclaration de la classe TForm1, en private par exemple. Dans ce cas Memo1 sera accessible et il n'est alors pas nécessaire de le passer en paramètre.

    Regarde un peu dans les tutos comment sont implémentés les objets dans Delphi, ainsi que la portés des diférents éléments, ça t'aidera beaucoup pour ce genre de problème.

    @++
    Dany

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 73
    Points : 53
    Points
    53
    Par défaut
    merci , ça fonctionne très bien , c'est beaucoup plus clair !

    j'ai même mis une boucle avec un timer pour savoir si un processus est lancé ,

    génial,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Violation d'accès drag&drop entre 2 tableaux
    Par flash11 dans le forum Débuter
    Réponses: 2
    Dernier message: 20/08/2011, 10h04
  2. Problème violation d'accès
    Par flo-1987 dans le forum C
    Réponses: 9
    Dernier message: 02/04/2009, 16h05
  3. Réponses: 5
    Dernier message: 13/01/2007, 19h45
  4. [vb 2005]Problème de violation d'accès concurentiel
    Par estelledany dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/06/2006, 17h14
  5. Problème de violation d'accès
    Par Oluha dans le forum Bases de données
    Réponses: 11
    Dernier message: 31/05/2005, 10h26

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