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

Free Pascal Discussion :

EAccessViolation avec interface et méthode de classe [Free Pascal]


Sujet :

Free Pascal

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    638
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 638
    Points : 408
    Points
    408
    Par défaut EAccessViolation avec interface et méthode de classe
    Bonjour,

    Je constate que l'appel d'une méthode de classe ayant une interface en paramètre provoque une erreur EAccessViolation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    IPublishable = interface
            procedure Publish;
            procedure Unpublish;
    end;   
     
    TPublisher = class
           class procedure Add(AKey : String; APublication : IPublishable);
    end;
    L'appel de TPublisher.Add avec un objet implémentant l'interface IPublishable (et héritant de TInterfacedObject) provoque une erreur du type EAccessViolation.

    S'agit-il d'un bogue ? Est-ce un comportement normal avec des méthodes de classe ?

  2. #2
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Sur delphi 2009 ça compile et ça ne plante pas.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    638
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 638
    Points : 408
    Points
    408
    Par défaut
    J'ai mis le code complet en pièce jointe. En fait il semble que le problème n'ait rien à voir avec les méthodes de classe mais avec le fait qu'avec les interfaces il y a un compteur de références et une libération automatique des objets.
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    c'est normal, on ne libère pas un TInterfacedObject, le compteur de référence s'en charge.

    ta variable "Article" étant une référence de classe et non d'interface, elle n'intervient pas dans le comptage.

    tu peux surcharger le destructor pour t'en assurer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    destructor TArticle.Destroy;
    begin
      WriteLn('Destroyed');
      inherited;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/11/2010, 11h24
  2. Réponses: 1
    Dernier message: 04/06/2008, 17h19
  3. [Conception] Méthode avec interface en paramètre
    Par javamax dans le forum Langage
    Réponses: 9
    Dernier message: 21/10/2007, 22h57
  4. Héritage d'interface avec masquage de méthode
    Par Pongten dans le forum ASP.NET
    Réponses: 4
    Dernier message: 05/09/2007, 22h16
  5. Pb avec une méthode de classe
    Par damien27000 dans le forum Langage
    Réponses: 5
    Dernier message: 29/08/2007, 17h50

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