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++ builder Callback


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Points : 14
    Points
    14
    Par défaut C++ builder Callback
    Bonjour,

    Je suis entrain de développer une application avec C++ builder xe qui utilise quelques DLL de communication.
    A un moment j'ai besoin d'appelé une Callback dans une des DLL pour mettre à jour une map dans maClass:


    maClass.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	static void CALLBACK CallbackAsynchEvent(unsigned char* Data);
    maClass.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void CALLBACK CallbackAsynchEvent(unsigned char* Data)
    {
    // Utiliser Data pour mettre à jour les données de maClass.
    }
    L’appel de la fonction s'effectue bien. Le souci est que j'aimerais utiliser Data pour mettre à jour une variable membre de maClass. Lorsque j'essai, C++ builder me marque " E2451 Undefined symbol XXXX"

    Merci pour votre aide.

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    undefined.

    il faut avoir l'include correspondant, et surtout, lier avec.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Merci pour ta réponse.

    J'ai pas bien compris. Que'est ce qu'il faut lier ?

    Je pense avoir mis tous les include qu'il faut, vu que dans maClass j'utilise la variable membre XXXX dans une autre fonction, et que C++ builder ne me mettait pas "E2451 Undefined symbol XXXX" avant.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    on aurait dis que la callback ne conne pas maClass. En effet, elle ne conne pas les fonction de cette class non plus.
    Quelqu'un a une idée ?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    La fonction callback étant statique, elle ne connaît pas les données membre de ta classe. Ce n'est pas lié à ta DLL, mais au fait d'essayer d'adresser une donnée membre depuis une fonction statique. D'une fonction statique on ne peut accéder qu'à des données statiques ou à des données locales à la fonction.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Le problème est le même pour les callbacks qui ne sont pas static.
    J'ai viens d'essayé sur d'autre Callbaks non static que j'utilise dans une autre partie du code.
    Si vous avez besoin de plus d'éléments je peux expliquer un peu plus en détail.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Attention, je crois qu'il y a collision entre plusieurs notions. Peut-être une imprécision de vocabulaire de ma part.
    statique dans mon précédent post veut dire que la fonction n'est pas une fonction d'instance (liée à une instance de classe) et n'a pas de rapport avec une instance donnée de ta classe. (aucun rapport avec le mot-clef static)
    Les callback ne peuvent pas être définis en tant que fonction membre car être une fonction membre influence le type du pointeur de fonction (à cause du pointeur this caché, pour faire court). Comme la DLL ne connaît pas ta classe elle ne peut appeler en callback que des fonctions libres.
    Or à l'intérieur d'une fonction libre on est forcément en contexte statique, au sens qu'on n'est pas lié à une instance. Dans ce contexte, les membres données de ta classe ne sont pas définis.
    C'est probablement la raison de ton erreur de compilation. Sans voir le code effectif je ne peux pas t'en dire plus.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Je comprends mieux le problème.
    Apparemment il y a "un idiome" pour contourner le problème:
    http://stackoverflow.com/questions/1...terface-from-c
    Je vais essayer d'appliquer cette méthode et voir ce que ça donne.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    J'ai utilisé la méthode que j'ai cité dans mon précédent post.
    Merci pour votre aide

  10. #10
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Si ton problème est résolu, clique donc sur le en bas de la page
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

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

Discussions similaires

  1. Choisir Visual c++ ou Borland C++Builder ?
    Par DevEric dans le forum Choisir un environnement de développement
    Réponses: 31
    Dernier message: 14/06/2007, 23h48
  2. Outils, cours et NOUVEAUX tutoriels pour Borland C++Builder
    Par hiko-seijuro dans le forum C++Builder
    Réponses: 10
    Dernier message: 12/03/2006, 22h33
  3. c++ builder JavaDoc :)
    Par JEG dans le forum C++Builder
    Réponses: 8
    Dernier message: 08/06/2002, 13h31
  4. Documentation DirectX dans C++Builder 3
    Par srvremi dans le forum DirectX
    Réponses: 1
    Dernier message: 26/04/2002, 09h59
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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