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 :

Remplacer InvokeHelper() pour une application NON MFC


Sujet :

MFC

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 23
    Points : 20
    Points
    20
    Par défaut Remplacer InvokeHelper() pour une application NON MFC
    Bonjour à tous,

    J'ai actuellement un programme fonctionnel utilisant un activeX définis.

    J'ai un fichier MaClasse.h de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    class MaClasse : public CWnd{
    protected:
    	DECLARE_DYNCREATE(CCamimgctrl1)
    public:
    	CLSID const& GetClsid(){// {CB91D304-704C-44bd-9554-2DC47156A198}
    		static CLSID const clsid =
    			{ 0xcb91d304, 0x704c, 0x44bd, { 0x95, 0x54, 0x2d, 0xc4, 0x71, 0x56, 0xa1, 0x98 } };
    		return clsid;
    	}
    	virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL){ 
    		return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); 
    	}
     
        BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, 
    				UINT nID, CFile* pPersist = NULL, BOOL bStorage = FALSE,BSTR bstrLicKey = NULL){ 
    		return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,pPersist, bStorage, bstrLicKey); 
    	}
     
    	CString get_ImageFileURL(){
    		CString result;
    		InvokeHelper(0x1, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
    		return result;
    	}
    	void put_ImageFileURL(LPCTSTR newValue){
    		static BYTE parms[] = VTS_BSTR ;
    		InvokeHelper(0x1, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
    	}
    et son cpp associé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include "stdafx.h"
    #include "MaClasse.h"
     
    IMPLEMENT_DYNCREATE(maClasse, CWnd)
    Maintenant, j'essaie d'utiliser les méthodes de cette classe pour un filtre directShow :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaClasse monObjet;
    monObjet.put_ImageFileURL(_T("monImage.cgi"))
    Cela compile mais l'appel à la méthode plante laborieusement à l'exécution.

    Il existe des apparemment des astuces pour arriver à utiliser ce genre de méthode dans des applications non MFC mais je ne trouve pour l'instant rien.

    J'en ai trouvé une pour une utilisation avec Qt -> http://www.qtcentre.org/archive/index.php/t-231.html qui fait appel à la méthode dynamicCall(), ou directement à la méthode Invoke() mais ce n'est pas applicable à mon projet.

    Connaissez-vous donc des équivalents à ces façons de faire ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 139
    Points : 12 239
    Points
    12 239
    Par défaut
    Votre code présente bien d'autres artefacts que "InvokeHelper".
    Ces artefacts n'impliquent pas une dépendance aux MFC mais c'est pas sûr.

    Si vous n'avez pas de code plus "open-libre" et que seul "InvokeHelper" crée une dépendance au MFC, n'oubliez pas que vous avez les sources des MFC.

    Regardez l'implémentation de cette méthode, avec un peu de chance, un simple copier-coller de ce code dans votre projet ferait l'affaire.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    Qu'appelez-vous code plus "open-libre" ?


    Au passage, j'ai plus de précision sur l'erreur qui survient : un assert est lancé à la première instruction de InvokeHelper car l'attribut m_pCtrlSite est NULL ! Cet attribut appartient à la classe ColeControl spécifique aux MFCs : c'est de là d'où vient ma dépendance. Cela implique que le simple copier/coller ne fonctionne pas

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 139
    Points : 12 239
    Points
    12 239
    Par défaut
    Qu'appelez-vous code plus "open-libre" ?
    Du code non lié à une bibliothèque tierce, comme les MFC.

    Moi, généralement, pour utiliser des composants COM(ActiveX) dans du code C++, j'utilise #import.

    http://msdn.microsoft.com/en-us/libr...b6(VS.71).aspx

Discussions similaires

  1. [EJB3] Conseils pour une application non web
    Par bobbk12000 dans le forum Java EE
    Réponses: 1
    Dernier message: 15/05/2009, 11h26
  2. Quels sont les meilleurs langages pour créer une application non-web (en local) ?
    Par Skeud007 dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 31/08/2007, 16h33
  3. Réponses: 2
    Dernier message: 12/12/2006, 17h42
  4. Réponses: 8
    Dernier message: 22/05/2006, 09h25
  5. [MFC]Bouton "?" pour une application boite dialogu
    Par fleur_de_rose dans le forum MFC
    Réponses: 2
    Dernier message: 23/03/2006, 08h44

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