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. #1
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Points : 49
    Points
    49
    Par défaut [ActiveX] Retour de BSTR sur une méthode externe
    Bonsoir,

    je développe un activeX en C++ sur visual studio.net, et j'ai un petit souci de retour sur une méthode utilisable en externe par du javascript.

    je veux retourner un BSTR, converti d'un char* avec la fameuse fonction ASCtoBSTR, cependant je ne retrouve dans mon javascript en retour que ce qu'il me semble être une adresse (un nombre tel que 1224792 )...à la place d'un texte

    Le code qui me pose problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    BSTR CMFCToActiveXCtrl::SXInit(VARIANT_BOOL _resilient)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
     
    	int res = funct->Init(_resilient);
    	BSTR strResult;
    	//
    	//funct->GetText(res) retourne ici un char*
    	//
    	this->ASCtoBSTR(funct->GetText(res),&strResult);
    	return strResult;
    }
    voyez vous là où je comets une erreur?

    merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Points : 49
    Points
    49
    Par défaut
    pour info j'arrive à faire passer ma chaine dans l'input box avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CString strResult("un test de chaine");
    	return strResult.AllocSysString();
    mais rien n'y fait à partir du char*

  3. #3
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    tu y arrives avec un CString et pas un char ?

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Points : 49
    Points
    49
    Par défaut
    avec un CString oui, mais pas un char* qui est en retour de ma fonction funct->getText(res)

    ce qui me semble bizarre, c'est que le texte qui s'affiche dans ma inputbox (remplie par mon javascript) est une suite de chiffre qui change constamment, ma fonction doit retourner des morceaux de zone mémoire...

  5. #5
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    On peut voir le détail de la fonction getText ?

  6. #6
    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,
    tu ne serais pas en unicode par hasard ?

  7. #7
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    sinon, construit ton CString à partir de ton char

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Points : 49
    Points
    49
    Par défaut
    tu ne serais pas en unicode par hasard ?
    je suis en Multibyte character set (dans les propriétés de mon projet) est ce que c'est correct ?

    On peut voir le détail de la fonction getText ?
    c'est une fonction qui est dans une librairie qui est donc sensée marcher

    sinon, construit ton CString à partir de ton char
    ca me parait cohérent, il faudrait que je regarde de ce coté là

  9. #9
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    il y a un constructeur CString qui prend en paramètre un char ... ou simplement une affectation

  10. #10
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Points : 49
    Points
    49
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char *res2 = new char();
    res2 = funct->GetText(res);
    CString strResult(res2);
    return strResult.AllocSysString();
    ça me renvoie la même chose
    comment est ce que je pourrais tester la valeur de retour de GetText dans mon projet? (sachant que c'est un activeX, je ne sais pas comment déboguer , bravo )

  11. #11
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Points : 49
    Points
    49
    Par défaut
    brb (1h de RER )

  12. #12
    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
    Citation Envoyé par mr.saucisse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char *res2 = new char();
    res2 = funct->GetText(res);
    CString strResult(res2);
    return strResult.AllocSysString();
    ça me renvoie la même chose
    comment est ce que je pourrais tester la valeur de retour de GetText dans mon projet? (sachant que c'est un activeX, je ne sais pas comment déboguer , bravo )
    salut ,
    je ne suis pas sur de la validité de code les 2 premieres lignes .
    on peut voir la definition de GetText ?


  13. #13
    mat.M
    Invité(e)
    Par défaut
    On n'utilise pas les char* en programmation COM !
    Faut éviter.
    utiliser d'autres types mais pas char *
    Pour la bonne et unique raison que si l'Active X est utilisé par un programme VB ça risque de planter...
    prendre bsr_t, wchar ...

    Si le code donné ne fonctionne pas,utiliser WideCharToMultiByte
    ou son inverse.
    C'est la fonction à utiliser sous COM pour les conversions
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/unicode_2bj9.asp


    comment est ce que je pourrais tester la valeur de retour de GetText dans mon projet? (sachant que c'est un activeX, je ne sais pas comment déboguer , bravo
    un truc tout bête : tracer dans un fichier texte ou bien avec OutputDebugString

  14. #14
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Points : 49
    Points
    49
    Par défaut
    ok, merci pour les conseils, demain je me relance dessus pronto, en espérant que ça fonctionnera

  15. #15
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Points : 49
    Points
    49
    Par défaut
    rebonjour,

    j'ai recréé un projet en win32 pour bien mettre les choses à plat, et le problème est le même, je crois que j'initialise mal ma chaîne BSTR ou quelque chose dans le genre

    voilà le code qui me pose problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    BSTR m_bstr = ::SysAllocString( L"Test d'initialisation" );
    if (m_bstr == NULL)
     return E_OUTOFMEMORY;
    //ici j'utilise la fonction de conversion de l'acsii vers le bstr
    funct->ASCtoBSTR(funct->GetText(res),&m_bstr);
     
    std::cout << m_bstr << "\n";
    ::SysFreeString( m_bstr );
    au final je me retrouve avec 00162B3C en sortie... et finalement le programme plante

    pour info voici les prototypes des fonctions que j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char* GetText(int errorCode);
    void ASCtoBSTR (char *str, BSTR *strRet);

  16. #16
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Points : 49
    Points
    49
    Par défaut
    en même temps le problème ici vient peut être directement de l'affichage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::cout << m_bstr << "\n";

  17. #17
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    oui, cout ne sait pas afficher de BSTR

  18. #18
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    construit une CString pour vérifier le contenu dans le debbugger

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CString maString(monBstr);

  19. #19
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Points : 49
    Points
    49
    Par défaut
    effectivement de cette manière j'ai le bon retour dans ma CString !

    mais pour passer ce retour à du VB ou du Javascript, il faut du BSTR c'est bien çà ?

  20. #20
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    Comment veux-tu appeler la fonction ? quel est le prototype ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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