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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  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