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

Visual C++ Discussion :

[activeX] comment faire pour que ma fonction retourne une valeur?


Sujet :

Visual C++

  1. #1
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut [activeX] comment faire pour que ma fonction retourne une valeur?
    Bonjour,

    ça fait une éternité que je n'ai plus touché aux joyeusetés de microsoft (MFC, ATL, etc...), et je n'y comprend plus rien

    Nous avons récupéré un activeX, et nous devons y ajouter une gestion des erreurs. Pour ce faire nous aimerions que nos méthodes renvoient un code d'erreur (long). Mais on ne sait pas comment faire.

    Donc voilà, nouc avons des fonctions "wrappées" dans le fichier idl, qui ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [id(IECISA_ACTIVE_X_ID_DELCERTSERIAL),    helpstring( "method delCertBySerial")]          void delCertBySerial([in]BSTR SerialNumber);
    [id(IECISA_ACTIVE_X_ID_DELCERTUSAGE),     helpstring( "method delCertByUsage")]           void delCertByUsage([in]BSTR strKeyUsage);
    [id(IECISA_ACTIVE_X_ID_GETTOKENSERIAL),   helpstring( "method GetTokenSerialNumber")]     void GetTokenSerialNumber([out]BSTR SerialNumber);
    // etc...
    Ces fonctions sont implémentées dans un fichier cpp à côté.

    Jusqu'ici, tout va bien. Ca fonctionne et tout.
    Maintenant, nous voudrions que ces fonctions nous retournent un long.
    Prenons l'exemple de la fonction GetTokenSerialNumber. Nous avons essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [id(IECISA_ACTIVE_X_ID_GETTOKENSERIAL),   helpstring(
    "method GetTokenSerialNumber")]     long GetTokenSerialNumber([out]BSTR
    SerialNumber);
    et de modifier le code cpp de cette fonction pour qu'elle retourne un long. Mais aprés ces modifications, le code compile, mais:
    1/ les points d'arrêts dans notre fonction ne fonctionnent plus (le débuggeur ne s'y arête pas).
    2/ notre fonction ne retourne rien.

    Savez-vous ce qu'il se passe? Auriez-vous des conseils pour m'aider à m'en sortir.

    ps: j'ai bien relu en détail le tuto de farscape pour créer un activeX avec la MFC, mais le problème de retour de valeur n'y est pas abordé.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  2. #2
    Futur Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 6
    Points
    6
    Par défaut reour de valeur des activeX
    Si la fonction retourne effectivement un long , il faut ecrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [id(IECISA_ACTIVE_X_ID_GETTOKENSERIAL),   helpstring(
    "method GetTokenSerialNumber")]     void GetTokenSerialNumber([out]LONG
    SerialNumber);

  3. #3
    Futur Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 6
    Points
    6
    Par défaut il manque juste un petit detail
    Le detail :

    au lieu de [out]LONG

    il faut mettre [out,retval]LONG pour que la fonction retourne une valeur

    sinon c'est un parametre de fonction par reference ....

  4. #4
    Futur Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 6
    Points
    6
    Par défaut j'ai été trop rapide pour répondre ...
    je n'avais pas bien vu le contexte ....
    jusqu'a present la fonction ne retournait aucune valeur mais modifiait SerialNumber qui etait passé par reference.

    Si on veut ajouter une valeur de retour numerique ( errValue )on doit ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    [id(IECISA_ACTIVE_X_ID_GETTOKENSERIAL),   helpstring(
    "method GetTokenSerialNumber")]     void GetTokenSerialNumber([out]BSTR
    SerialNumber, [out,retval]LONG errValue);
    et si je me suis encore trompé merci de le signaler ....
    C'est toujours difficile de faire des reponses rapides avec 0 bug

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    en général on ne modifie par directement l'interface ...
    on supprime et recréé la fonction avec les bonnes options.

  6. #6
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Yop,

    merci benoitra
    mais ça ne fonctionne pas...

    farscape, tu as raison, j'avais oublié que visual génère tout seul tout un tas de choses.

    Quoi qu'il en soit, je laisse tomber cette histoire d'activeX, je vais faire mon bousin en java, c'est trop compliqué ces histoires.

    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

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

Discussions similaires

  1. Comment faire pour que le nom d'une plage de cellule soit
    Par dolin007 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/11/2009, 18h03
  2. Comment faire pour que SELECT retourne 0 s'il est vide
    Par Chacha35 dans le forum Développement
    Réponses: 4
    Dernier message: 14/10/2009, 13h58
  3. Réponses: 2
    Dernier message: 09/06/2006, 14h49
  4. Réponses: 24
    Dernier message: 24/05/2006, 19h19
  5. [VB6]Comment faire pour que le caption d'une ARProgressBar..
    Par MegaBigBoss dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 02/04/2006, 20h42

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