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 :

Utilisation d'un ActiveX : InvokeHelper()


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Par défaut Utilisation d'un ActiveX : InvokeHelper()
    Bonjour à tous,

    Pour un projet pro (je suis étudiant), j'ai crée une petite appli MFC qui doit lancer et interagir avec un activeX.
    Seulement voilà, j'ai un peu de mal avec le wrappage.
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void CControl::SetWifiEnable(LPVOID pc, BOOL bWifiEnable)
    {
    	static BYTE parms[] =	VTS_PHANDLE VTS_BOOL;
    	InvokeHelper(1, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
    		 tpc, bWifiEnable);
    }
    Fonctionne bien (en tout cas ça ne gueule pas à la compilation). Mais j'ai quelques problèmes lorsque je veux passer un tableau parms vide à la fonction InvokeHelper (fonction sans argument). Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int CControl::Stop ()
    {
    	int	result;
    	static BYTE parms[]; //Ne fonctionne pas
    	InvokeHelper(2, DISPATCH_METHOD, VT_I4, &result, parms);
    	return	result;
    }
    Ne fonctionne pas. Comment puis-je réaliser celà? (désolé je suis débutant et la doc ne m'a pas appris grand chose à part que parms devait être une liste représentant le type des paramètres à passer).

    Au passage si vous connaissez des liens avec des bons tutos pour apprendre à faire/wrapper des activeX, je suis preneur (j'ai déjà lu celui de Fairscape, très bon au passage)

    Merci d'avance

  2. #2
    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
    Par défaut
    bonsoir,
    un détail , c'est toi qui fait le wrapper de l'activex ?
    pourquoi ne pas générer la classe directement ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Par défaut
    Non en réalité la classe est déjà générée. L'activeX étant déjà crée, j'ai eu accès aux sources.
    L'application que j'ai reprise avait déjà la classe wrapper générée par visual (correspondant à l'activeX). Ce que je voudrais faire, c'est la compléter car j'ai rajouté des fonctions dans mon activeX que je souhaite pouvoir utiliser avec mon appli.

  4. #4
    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
    Par défaut
    si tu as rajouté des fonctions dans l'activex , il faut régénérer le wrapper de classe .

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Par défaut
    Je ne peux pas simplement rajouter mes fonctions à la fin du wrapper?

    Alors mon OCX inclut une DLL qui elle-même inclut tout mes sous-projets.
    Le fichier .def de mon OCX est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ; ocx.def : Declares the module parameters.
     
    LIBRARY      "ocx.OCX"
     
    EXPORTS
    	DllCanUnloadNow     PRIVATE
    	DllGetClassObject   PRIVATE
    	DllRegisterServer   PRIVATE
    	DllUnregisterServer PRIVATE
    Le fichier .idl est le suivant :
    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
    28
    29
    30
    31
     
    / ocx.idl : type library source for ActiveX Control project.
     
    // This file will be processed by the MIDL compiler tool to
    // produce the type library (ocx.tlb) that will become a resource in
    // ocx.ocx.
     
    #include <olectl.h>
    #include <idispids.h>
     
    [ uuid(0337E397-A8D4-4250-8680-DC14F86BB8CF), version(1.0),
      helpfile("ocx.hlp"),
      helpstring("ocxActiveX Control module"),
      control ]
    library ocxLib
    {
    	importlib(STDOLE_TLB);
     
    	//  Primary dispatch interface for CocxCtrl
     
    	[ uuid(33087541-1BB7-4557-A402-0E4CFF31A2CF),
    	  helpstring("Dispatch interface for ocxControl")]
    	dispinterface _Docx
    	{
    		properties:
    		methods:
     
    			[id(1)] void Create(...)
    			[id(2)] void RegisterEventCallback(...);
    			[id(3)] void SuspendDisplay(...);
                      ...
    Je dois donc rajouter mes nouvelles fonctions à la main ce que j'ai fait. Pour celà dois-je définir les-dites fonctions en extern lors de leur définition dans les sous-projets comme suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    extern "C" void api Start(Handle pc)
    {
       ma fonction
    }
    Ou ce n'est pas nécessaire?

    De même puisque c'est une DLL qui inclut tous mes sous-projets dois-je aussi rajouter ces fonctions dans le .def de ma DLL? (pour rappel, l'OCX inclut ensuite la DLL).

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 92
    Par défaut
    Après relecture du tuto, j'ai une autre question :

    Comment créer la classe wrapper avec visual 2003?

    Merci d'avance,

    CRC

Discussions similaires

  1. Utilisation du composant ActiveX acroPDF
    Par Faith's Fall dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/08/2009, 19h45
  2. Réponses: 1
    Dernier message: 03/08/2006, 20h40
  3. [VB6]Utilisation d'un activeX
    Par marcou959 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/03/2006, 16h48
  4. Réponses: 1
    Dernier message: 21/02/2006, 17h13
  5. [ActiveX] Peut-on utiliser un Controle ActiveX avec Java
    Par waldo2188 dans le forum Multimédia
    Réponses: 2
    Dernier message: 22/02/2005, 11h39

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