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 :

[MFC] Tester l'initialisation d'un ActiveX


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 91
    Par défaut [MFC] Tester l'initialisation d'un ActiveX
    Bonjour.

    Alors mon appli comporte deux fenetre en parrallele et j'aimerais declencher un traitement seullement quand l'activeX de ma premier fenetre est lancer.

    Donc j'ai essayé en faisant une boucle while en essayant de tester l'IID de ma fonction mais j'ai pas reussi.....

    Auriez vous une idée ?

  2. #2
    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
    c'est un activeX que tu as créé ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 91
    Par défaut
    Non c'est activeX d'econ* pour ne pas le nommer...

  4. #4
    mat.M
    Invité(e)
    Par défaut
    Il ya plusieurs moyens :
    Avec
    CLSIDFromProgID
    Looks up a CLSID in the registry, given a ProgID.

    HRESULT CLSIDFromProgID(
    LPCOLESTR lpszProgID, //Pointer to the ProgID
    LPCLSID pclsid //Pointer to the CLSID
    );
    Cette fonction retourne un GUID en passant l'identifiant de l'Acitve X
    obtenu dans la base de registre , dans HKEY_CLASSROOT\CLSID\.....

    Par exemple on trouve : MSFlexGrid Style Property Page Object

    Sinon il ya la fonction inverse CLSIDFromProgID


    Ou bien avec CoCreateInstance/QueryInterface qui retourne un pointeur sur une interface
    IUnknown::QueryInterface
    Returns a pointer to a specified interface on an object to which a client currently holds an interface pointer. This function must call IUnknown::AddRef on the pointer it returns.

    HRESULT QueryInterface(
    REFIID iid, //Identifier of the requested interface
    void ** ppvObject //Address of output variable that receives the
    //interface pointer requested in iid
    );
    Avec les MFC il y a CComPtr


  5. #5
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par poseidon2
    Non c'est activeX d'econ* pour ne pas le nommer...
    Eh bien avec les fonctions que j'ai évoquée à l'instant il faut passer le nom de l'Active X à CLSIDFromProgID qui retourne un GUID.
    Après passer ce GUID à QueryInterface

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 91
    Par défaut
    Merci bien, je vais essayer

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 91
    Par défaut
    J'ai regardé mais je ne vois pas en quoi je vais savoir si mon activeX est bien lancé. Car apres le premier lancement, l'activeX est enregistrer en base de registre donc il va toujours le trouver......

  8. #8
    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
    tu ne pourrais pas créer une zone de mémoire partagée, et au moment où tu instancies ton activeX, tu renseignes une valeur pour dire qu'il est instancié, et si cette valeur est déjà renseignée, alors tu n'instancies pas l'activeX ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 91
    Par défaut
    L'embetant c'est qu'étant dans une MFC, l'activeX est censé s'instencié au demarrage. Seulement il faut que j'attende qu'il est finis de se lancer pour agir dessus....

    Pour vous eclairer je met un bout de code. C'est un bout du InitDialogue de la boite de dialog principale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	Presentation newPre = new Presentation(NULL);
    	newPre.SetOutPut(this, &m_player);
    	newPre.DoModal();
    Ici je declare ma nouvelle boite de dialogue(Presentation), puis le lui pâsse les parametres de la premiere avec SetOutPut et ensuite je lance ma deuxieme boite de dialogu....

    Je me demandais en, fait si c'étais pas le DoModal() qui bloquait.....

  10. #10
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Ca me parrait bizarre que ton ActiveX soit dans un état "initialisation en cours". A ma connaissance, par défaut, tant que l'ActiveX n'est pas créé tu restes bloqué. Qu'est-ce qui te fait dire ça ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 91
    Par défaut
    Ben en fait, apres avoir passer mes parametre, je fais une action sur l'activeX sur le bouton OK de mon "newPre" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void Presentation::OnBnClickedOk()
    {
     
    	ieConfPlayerPtrPres=m_playerRes->GeteConfPlayer();
    	CString cheminScene = "C:\Program Files\FranceTelecom\eConfv4\scenes\simple\tres_simple.ecf";
    	ieConfPlayerPtrPres->OpenScene((_bstr_t)cheminScene);
    	OnOK();
    }
     
    void Presentation::SetOutPut(CDialog *diag, CCctrleconf1 *m_player)
    {
    	m_diag=diag;
    	m_playerRes=m_player;
    }
    Mais en debugantj'obtiens une valeur vide dans "ieConfPlayerPtrPres" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    -	this	0x0012df50 { classPresentation={...} _messageEntries={Length=0} messageMap={...} ...}	Presentation*
       +	   CDialog	{...}	CDialog
    	_messageEntries	{Length=0}	AFX_MSGMAP_ENTRY[]
       +	 classPresentation	{ m_lpszClassName=0x00517cc8     m_nObjectSize=128 m_wSchema=65535 ...}	CRuntimeClass
        +	iTermConfPres	{...}	 _com_ptr_t<_com_IIID<ITerminalConfig,&_GUID_05084331_04c2_4378_b1c3_c64ca59b3dd6> >
        -	ieConfPlayerPtrPres	{...}	_com_ptr_t<_com_IIID<IeConfPlayer,&_GUID_79b9610e_0906_4071_9396_108aba025cfb> >
              +	    m_pInterface	0x00000000	IeConfPlayer*
              +	m_diag	0x0012ec70	CDialog*
              +	m_playerRes	0x0012ed38 { classCCctrleconf1={...} }	CCctrleconf1*
              +	messageMap	{ pBaseMap=0x0051f240 lpEntries=0x00515fcc }	AFX_MSGMAP

  12. #12
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "C:\Program Files\FranceTelecom\eConfv4\scenes\simple\tres_simple.ecf";
    t'aurais pas oublié de doubler les anti slash ?

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 91
    Par défaut
    C'est aussi vrai

    Mais l'erreur ne viens pas de la vu que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     m_pInterface   0x00000000   IeConfPlayer*
    (En plus apres correction ca fait pareil...)

  14. #14
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Et si tu attends un certain temps ça marche ?

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 91
    Par défaut
    Désolé de repondre en retard mais j'étais en vacances et comme toute les bonnes choses ont une fin, me revoici avec ma question tordu...

    Donc. J'ai essayer avec un sleep de 10sec mais ca ne change rien.

    En fait j'ai l'impression en regardant le debugueur que meme si les pointeurs sont affecté(je les passe donc pas de probleme) que l'activeX n'est pas lancé.....

    Je me demande si ce n'est pas du au lancement de ma premiere boite de dialog.

    Comme je l'ai dis plus loin, je fais le lancement dans l'InitDialog de l'interface principale. Or j'ai l'impression que le programme attend(du au DoModal()) qu'on clique sur OK pour demarrer l'activeX.
    Ce qui m'embete un petit peu....

  16. #16
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    C'est quoi la question ?

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 91
    Par défaut
    Effectivemùent c'est pas tres clair...

    Donc la question c'est : Y a t il un autre moyen pour lancer mes deux CDialog en parallele?

    Comme ca je pourrais verifier si kle probleme viens de mon DoModal ou de l'active X lui meme....

    C'est un peu plus clair.............. ou pas ?

  18. #18
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Ben je comprends pas quand est-ce que tu crées ton ActiveX, et que vient faire ton dialog / DoModal

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 91
    Par défaut
    Alors ..... En fait j'ai une premiere fenetre CDialog ou l'activeX est lancé. Elle marche.

    Apres j'ai voulou en creer une deuxieme qui s'ouvre avant mais qui agis sur la premiere (sur l'activeX de la premiere en fait)

    Donc je l'ai créé mais pour qu'elle se lance en parralele, je l'ai lancé dans le InitDialog de ma premiere fenetre....

    et j'effectue un DoModal pour activer ma deuxieme fenetre......

    Ai je été clair?
    J'ai bien peur que non....

  20. #20
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    J'ai peur que oui plutot. C'est à dire que tu bloques l'initialisation de ta 1° fenêtre en appelant la 2° qui doit agire sur la 1° ?
    Ah ben si c'est ça c'est normal que ça coince vu que l'init n'est pas terminée. Et puis nivo design c'est pas top. Mais bon.
    Tu as essayé d'appeler CDialog::OnInitDialog() avant ton DoModal() ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/12/2018, 13h09
  2. tester l'initialisation d'une variable
    Par etud_ini dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/10/2007, 13h00
  3. Réponses: 4
    Dernier message: 22/08/2007, 20h50
  4. [VB]Initialisation d'un activeX à partir de <param>
    Par mr.saucisse dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/01/2006, 13h13
  5. [THREAD MFC] tester lexistence
    Par Tigris94 dans le forum MFC
    Réponses: 12
    Dernier message: 17/11/2004, 11h49

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