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

Python Discussion :

Surcharge de la méthode d'un objet


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut Surcharge de la méthode d'un objet
    Bonjour,

    Voici mon problème:
    Je cherche à piloter CanAlyser via un code python.

    J'ai trouvé ce code sur le net qui fonctionne presque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Application = Dispatch("CANalyzer.Application")
    Measurement = Application.Measurement
    ApplicationEvents = WithEvents(Application,ApplEvents)
    MeasurementEvents=WithEvents(Measurement,MeasEvents)
    CAPL=Application.CAPL
    Application.Open("C:\\Users\\test.cfg")
     
    ref=CAPL.GetFunction("TEST")
    Measurement.Start()
    wait(2000)  
    ref.Call(1) #this is ignored by canalyzer
    Le souci est que "ref=CAPL.GetFunction("TEST")" doit être exécuté sur l'événement OnInit de l'objet Measurement. Et c'est là que je coince.

    En VBA ça donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Measurement_OnInit()
    Set ref= App.Capl.GetFunction("TEST")
    End Sub
    Est il possible de faire la même chose en python?

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Ben c'est pas justement à ça que sert WithEvents ?
    C'est quoi MeasEvents ?
    Ca pourrait ressembler à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class MeasEvents:
        def OnInit(self):
            ...

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut
    Effectivement ton idée fonctionne, je te remercie pour ta réponse.

    Néanmoins, j'ai toujours un souci.
    Le code devient:

    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
    import win32com.client
    WithEvents = win32com.client.WithEvents
    Application = win32com.Dispatch("CANalyzer.Application")
    CAPL=Application.CAPL
     
    class MeasEvents:
        def OnInit(self):
            print "Measurement.OnInit()"
            ref=CAPL.GetFunction("TEST")
     
    Measurement = Application.Measurement
    MeasurementEvents=WithEvents(Measurement,MeasEvents)
     
    Application.Open("C:\\Users\\test.cfg")
     
    Measurement.Start()
     
    ref.Call(1)
    L'objet 'ref' n'existe pas lorsqu'il est appelé.
    Je ne sais pas comment le récupérer depuis la méthode 'OnInit()'.

  4. #4
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    ref doit devenir self.ref pour y accéder depuis l'instance de MeasEvents.
    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
     
    import win32com.client
    WithEvents = win32com.client.WithEvents
    Application = win32com.Dispatch("CANalyzer.Application")
    CAPL=Application.CAPL
     
    class MeasEvents:
        def OnInit(self):
            print "Measurement.OnInit()"
            self.ref=CAPL.GetFunction("TEST")
     
    Measurement = Application.Measurement
    me=MeasEvents()
    MeasurementEvents=WithEvents(Measurement,me)
     
    Application.Open("C:\\Users\\test.cfg")
     
    Measurement.Start()
     
    me.ref.Call(1)
    je pense que ca devrait fonctionner!

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 6
    Par défaut
    Cette solution ne fonctionne pas.

    Le message d'erreur spécifie que l'instance "WithEvents" prend 2 arguments mais que 3 lui sont donnés.

    J'ai encore des lacunes en langage objet, cette erreur est elle due au fait que 'me' est un objet et 'MeasEvents' une classe? L'instance "WithEvents" prenant comme argument un objet et une classe.

    J'ai essayé en déclarant "ref" en tant que "variable" globale mais sans résultat.
    Est il possible de déclarer un objet en global?

  6. #6
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Par défaut
    dans ce cas est ce que cela 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
     
     
    import win32com.client
    WithEvents = win32com.client.WithEvents
    Application = win32com.Dispatch("CANalyzer.Application")
    CAPL=Application.CAPL
     
    class MeasEvents:
        def OnInit(self):
            print "Measurement.OnInit()"
            self.ref=CAPL.GetFunction("TEST")
     
    Measurement = Application.Measurement
    MeasurementEvents=WithEvents(Measurement,MeasEvents)
     
    Application.Open("C:\\Users\\test.cfg")
     
    Measurement.Start()
     
    Measurement.ref.Call(1)
    ou puis je voir la doc de l'api?

    si je comprend, WithEvents permet d'étendre Measurement avec MeasEvents?!
    dans ce cas, ref devient attribut de Measurement.

  7. #7
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2011
    Messages : 43
    Par défaut VB.NET recuperation d'evenement
    ,j'ai commencer un projet en VB.NET mais j'arrive pas à appeller les fonction CAPL :

    Dim WithEvents gCanApp As CANalyzer.Application
    Dim WithEvents gCanMeasurement As CANalyzer.Measurement
    Dim gMultiplyFunction As CANalyzer.CAPLFunction
    Dim gMultiplyResult As Integer

    gMultiplyFunction = gCanApp.CAPL.GetFunction("Multiply”)

    gMultiplyResult = gMultiplyFunction.Call (4, 5)

    mais ca marche pas pour moi ca me donne un erreur de ce genre :

    gMultiplyFunction = gCanApp.CAPL.GetFunction("Multiply”):defaillance irrémédiable ( Exception de HRESULT: 0x8000FFFF)

    je vous remercier pour une reponse pour remedier à ce blem
    merci et bonne journé

Discussions similaires

  1. méthode sur l'objet courant?
    Par mathher dans le forum C++
    Réponses: 3
    Dernier message: 31/03/2006, 17h27
  2. Réponses: 2
    Dernier message: 02/02/2006, 23h00
  3. Méthode avec argument objet de la même classe
    Par Black-Ghost dans le forum C++
    Réponses: 5
    Dernier message: 30/01/2006, 10h01
  4. [MFC] Surcharge d'une méthode CListCtrl
    Par semenzato dans le forum MFC
    Réponses: 8
    Dernier message: 22/12/2005, 22h05
  5. Conseils sur la méthode de développement objet métier
    Par RamDevTeam dans le forum Langage
    Réponses: 5
    Dernier message: 08/12/2005, 18h14

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