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

VB 6 et antérieur Discussion :

Callback asynchrone - erreur 98


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Callback asynchrone - erreur 98
    Bonjour,

    Pour un projet, j'essaie de mettre en place un mécanisme de callback asynchrone, sans succès.

    L'architecture est la suivante:
    - Deux interfaces définies dans une DLL activeX, publiques. IInterface et IInterfaceEvent
    - Un EXE activeX qui implémente la classe IInterface et contient une instance publique de IInterfaceEvent
    - Un client EXE standard qui instancie un IInterface (ok) et tente d'enregistrer le callback (erreur 98)

    J'ai essayé de faire fonctionner l'exemple "Coffee2" fourni avec MSDN qui est censé implémenter le même mécanisme, et j'ai malheureusement le même résultat.
    A noter que si je déplace le code de l'exe activeX directement dans l'exe standard, l'affectation fonctionne parfaitement.

    Y a t'il une solution ?

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Pour illustrer plus précisément ce que je souhaite faire, voici un code d'exemple.
    Tout d'abord, dans le module EXE activeX

    L'interface IDemo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
     
    'pour callback
    Public itfEvent As IDemoEvent
     
     
    'lance le traitement
    Public Sub DoWork()
     
    End Sub
    L'interface IDemoEvent pour générer le callback asynchrone:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Explicit
     
    Public Sub Notify()
     
    End Sub
    La classe Work qui implémente IDemo
    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
    Option Explicit
     
    Implements IDemo
     
    Public mDemoEvent As IDemoEvent
     
    Private Sub IDemo_DoWork()
        'notification
        mDemoEvent.Notify
    End Sub
     
    Private Property Set IDemo_itfEvent(ByVal RHS As IDemoEvent)
        Set mDemoEvent = RHS
    End Property
     
    Private Property Get IDemo_itfEvent() As IDemoEvent
        IDemo_itfEvent = mDemoEvent
    End Property

    Puis, côté application de test:
    La classe EventHandler qui implémente IDemoEvent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit
     
    Implements IDemoEvent
     
     
    Private Sub IDemoEvent_Notify()
        MsgBox "notified!"
    End Sub
    Le bouton de test:
    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
    Option Explicit
     
    Public demoItf As IDemo
    Public demoItfEvent As EventHandler
     
    Private Sub cmdQuitter_Click()
        End
    End Sub
     
    Private Sub cmdTest_Click()
        If demoItf Is Nothing Then Set demoItf = New DemoAsyncCallback.CWork
        If demoItfEvent Is Nothing Then Set demoItfEvent = New EventHandler
     
        'enregistre le event handler
        Set demoItf.itfEvent = demoItfEvent
     
        'execution
        demoItf.DoWork
    End Sub
    Lors de l'affectation Set demoItf.itfEvent = demoItfEvent, l'erreur 98 est levée "Une propriété ou un appel à une méthode ne peuvent utiliser une référence vers un objet privé, que ce soit comme argument ou comme valeur renvoyée"

  3. #3
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 178
    Points
    17 178
    Par défaut
    Salut

    Citation Envoyé par apolon34 Voir le message
    Pour illustrer plus précisément ce que je souhaite faire, voici un code d'exemple.
    .............................
    Le bouton de test:
    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
    Option Explicit
     
    Public demoItf As IDemo
    Public demoItfEvent As EventHandler
     
    Private Sub cmdQuitter_Click()
        End
    End Sub
     
    Private Sub cmdTest_Click()
        If demoItf Is Nothing Then Set demoItf = New DemoAsyncCallback.CWork ' <-------------- ICI ------------ ?
        If demoItfEvent Is Nothing Then Set demoItfEvent = New EventHandler
     
        'enregistre le event handler
        Set demoItf.itfEvent = demoItfEvent
     
        'execution
        demoItf.DoWork
    End Sub
    Lors de l'affectation Set demoItf.itfEvent = demoItfEvent
    .........
    Ligne 11, Ou est définit DemoAsyncCallback.CWork ?
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Salut,

    C'est la classe "Work" (qui s'appelle en fait CWork) de l'exe activex. Je l'ai ajouté dans les références du projet pour pouvoir y accéder.

Discussions similaires

  1. Mongoose save rate et lance le callback sans erreur
    Par TLOH45 dans le forum NodeJS
    Réponses: 3
    Dernier message: 19/02/2013, 17h05
  2. Callback et erreur mémoire
    Par CodeCRC dans le forum Débuter
    Réponses: 12
    Dernier message: 14/01/2009, 10h38
  3. [CTLIB] fonction callback asynchrone ?
    Par tomasha dans le forum Sybase
    Réponses: 8
    Dernier message: 07/03/2007, 10h21
  4. Réponses: 4
    Dernier message: 09/08/2006, 22h28
  5. Erreur Socket Asynchrone 10053
    Par QAYS dans le forum Delphi
    Réponses: 2
    Dernier message: 16/06/2006, 07h44

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