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

MFC Discussion :

[ActiveX] Retour de BSTR sur une méthode externe


Sujet :

MFC

  1. #21
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Par défaut
    c'est une méthode de retour d'erreur dans mon activeX que je dois appeler à partir d'un script externe, typiquement JS ou VB, et qui doit me retourner un texte (le fameux BSTR) pour le placer dans un inputbox ou un textbox par exemple.

    et pour son prototype, ca devrait ressembler à BSTR fonction(int a)

  2. #22
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    normalement ca devrait etre bon

  3. #23
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Par défaut
    normalement oui

    voilà comment j'appelle ma fonction dans mon code html/js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (...)
    document.getElementById("Resultat").value=ActiveX.Init(false);
    (...)
    <INPUT TYPE="Text" VALUE="" ID="Resultat">
    <INPUT TYPE="Button" VALUE="Start" onClick="Init()">
    mais pas moyen de faire passer le texte avec le retour en BSTR

  4. #24
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Par défaut
    c'est drôle parceque j'ai une methode TestBstr qui fonctionne très bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BSTR CMFCToActiveXCtrl::TestBstr(void)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    	CString strResult("test de chaine");
    	return strResult.AllocSysString();
    }
    et une autre qui ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    BSTR CMFCToActiveXCtrl::Init(VARIANT_BOOL _b)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
     
     
    	int res = funct->Init(_b);
    	BSTR strResult = ::SysAllocString( L"arazeazeazeazeaze" );
    	this->ASCtoBSTR(funct->GetText(res),&strResult);
    	CString maString(strResult);
    	return maString.AllocSysString();
    }
    je ne comprends pas

    est ce que quelque chose est incohérent dans mon code ?

  5. #25
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Et si tu interchanges GetText() et des chaînes littérales dans chacune des méthodes, ça change les choses ? Juste histoire de l'éliminer des suspects potentiels.

  6. #26
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Par défaut
    je viens de tester et effectivement ça fonctionne

    ce code ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    BSTR CMFCToActiveXCtrl::Init(VARIANT_BOOL _b)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
     
    	int res = funct->Init(_b);
     
    	CString maString("un test de chaine");
    	return maString.AllocSysString();
    }
    j'ai toujours mon retour avec des chiffres..

    et celui ci fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BSTR CMFCToActiveXCtrl::TestBstr(void)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
     
    	CString strResult(funct->GetText(0));
    	return strResult.AllocSysString();
    }
    ici mon retour est celui attendu !

    ça vient donc de résoudre mon problème, merci beaucoup à toi loulou et aux autres qui m'ont répondu

    maintenant je ne comprends toujours pas d'où viens l'erreur, je me demande si le passage du booléen en paramètre de la première fonction ne pose pas problème ? je jette un coup d'oeil là dessus

  7. #27
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Par défaut
    pour info je confirme que int res = funct->Init(FALSE); fonctionne

  8. #28
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Par défaut
    bon le problème est résolu...

    j'avais dans mon dispatch de méthode externe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Dispatch map
     
    BEGIN_DISPATCH_MAP(CActiveXCtrl, COleControl)
    	DISP_FUNCTION_ID(CActiveXCtrl, "Init", dispidInit, Init,VT_I4, VTS_BOOL)
    END_DISPATCH_MAP()
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Dispatch map
     
    BEGIN_DISPATCH_MAP(CActiveXCtrl, COleControl)
    	DISP_FUNCTION_ID(CActiveXCtrl, "Init", dispidInit, Init,VT_BSTR, VTS_BOOL)
    END_DISPATCH_MAP()
    le compilateur ne voit pas que le retour de ma fonction n'est pas le même que le retour décrit dans la macro et fait donc n'importe quoi sans rien dire, c'est fourbe

    merci à tous :o

  9. #29
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    ah ba forcément !!!

    n'oublie pas le bouton résolu en bas à gauche

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 10
    Dernier message: 12/05/2014, 09h48
  2. [VBA] information sur une méthode
    Par stolx_10 dans le forum Access
    Réponses: 27
    Dernier message: 19/09/2006, 17h27
  3. Récupérer des infos sur une page externe
    Par Horrigan dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 20/07/2006, 14h46
  4. blocage sur une méthode synchronized
    Par rockelite dans le forum Général Java
    Réponses: 3
    Dernier message: 03/05/2006, 22h28
  5. Réponses: 3
    Dernier message: 16/04/2004, 16h51

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