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 :

intégrer un fichier .tlb dans un projet MFC


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut intégrer un fichier .tlb dans un projet MFC
    Bonjour,
    Je veux intégrer un objet COM .tlb dans mon application MFC
    j'ai ajouter ce fichier sur mon projet mais je sais pas comment le gérer, j'ai aucune idée sur comment le faire

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Fais un clique droit sur ton projet comme si tu ajoutais une classe.
    Et tu verras dans la fenêtre de l'assistant "Ajoute de Classes" comment ajouter une classe à partir d'une librairie de type.

  3. #3
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut
    j'ai pas compris ce que vous venez de dire
    j'ai déja intégrer le .tlb dans mon projet mais après je plante
    je veux afficher l'interface associée à ce ce tlb
    Merci d'avance

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par 3aychoucha Voir le message
    j'ai pas compris ce que vous venez de dire
    j'ai déja intégrer le .tlb dans mon projet mais après je plante
    je veux afficher l'interface associée à ce ce tlb
    Merci d'avance
    salut intégrer un objet COM ( ocx/dll) dans un projet est plus complexe;
    il faut au préalable utiliser la directive #import nom_dll_nom_interface
    Puis appeler CoCreateInstance et QueryInterface pour créer des pointeurs sur les méthodes de l'objet COM.
    En ajoutant la dll /objet COM ( ocx /dll ) Visual C++ va générer un fichier d'interfaces et les ID des interfaces de l'obet
    Je conseille de regarder dans le MSDN c'est trop complexe à expliquer ici..

  5. #5
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour 3aychoucha.

    Pourquoi avoir créer un nouveau sujet ->

    http://www.developpez.net/forums/d99...ivex-winforms/

    Sinon, j'en conclu que tu as compris l'histoire des tlb.

    Donc ensuite un point de départ, dans un fichier d'en-tête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #import "ControleActiveX.tlb" raw_interfaces_only
    using namespace ControleActiveX;
    Evidemment il faudra remplacer par les bons noms. A partir de là intellisense fonctionnera.

    Exemple d'utilisation :

    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
     
    ControleActiveX::IControleActiveXPtr m_pControleActiveX = NULL;
    bool m_bDllInitialized = false;
     
    try{
     
      ControleActiveX::IControleActiveXPtr pControleActiveX(__uuidof(ControleActiveX::CControleActiveX));
     
      m_pControleActiveX = pControleActiveX;
     
      pControleActiveX = NULL;
     
      // le code de retour de la méthode de l'ActiveX
      long lRet = -1;
      _bstr_t bstr("Une chaîne de caractère à passer en paramètre");
      BSTR Bstr;
      Bstr = bstr.copy();
     
      m_pControleActiveX->UneMethode(Bstr, &lRet);
     
      if(lRet == 0)
        m_bDllInitialized = true;
    }
    catch(...){
     
      if(m_pControleActiveX){
        m_pControleActiveX = NULL;
    }
    Bien sûr, c'est juste un exemple, les noms de méthodes et les paramètres seront différents.
    Il faudrait aussi le code d'erreur, puisqu'une dll COM retourne un HRESULT. Dans cette exemple, je me base sur un code d'erreur personnalisé (lRet).

    PS : ne pas oublier d'initialiser COM avant (CoInitialize).

  6. #6
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut
    Merci Mat.M
    Merci moldavi, en fait j'ai crée cette nouvelle discussion car je crois qu'il ya une différence entre l'intégration d'un activeX et d'un .tlb

  7. #7
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    Un fichier .tlb ne s'enregistre pas sur le système. C'est l'activeX à partir duquel on génère le tlb qui doit être enregistré.

  8. #8
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut
    J'ai pas de dll
    j'ai seulement un .tlb et un .exe
    et il me faut intégrer l'interface du point exe( c'est un .vi) sur une boite de dialogue mfc

  9. #9
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    Je vous ai déjà posé la question : êtes-vous certain que le .exe est un contrôle activeX, du moins qu'il répond au critère d'un objet COM ?

    Donnez-nous plus d'information sur l'exe et sur votre code, on tourne en rond.

  10. #10
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut
    Bonjour,
    c'est un activeX Automation server et moi je veux faire la partie client

    Pour le code de mon application c'est une simple application dialog based
    puis j'ai suivi ce code

    code:
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    // Acquire.cpp : This source code is an Automation client. It calls the
    // LabVIEW 5.0's automation server. It loads the VI Acquire 1 Point from 1 Channel
    // VI and runs it.
    //
     
    #include "windows.h"
    #include "stdio.h"
    #include "conio.h"
    #include <stdlib.h>
    #include <string.h>
    #include <iostream.h>
    #import "c:\lv50\RESOURCE\labview50.tlb"
     
    main() 
    {
    	VARIANT sample;
    	int size = 0;
    	char Path[1000];
     
     
    	// define the path to the application
    	char VIPath[100] =  "\\examples\\daq\\anlogin\\anlogin.llb\\Acquire 1 Point from 1 Channel.vi";
    	// generate a  namespace declaration to and identify and assign a name to a declarative region.
    	// In this case we are assigning the LabVIEW.
    	using namespace LabVIEW;
    	_ApplicationPtr pLV;
    	VirtualInstrumentPtr pVI;
     
     
    	CoInitialize(NULL);
    	do 
    	{
     
    		pLV.CreateInstance("LabVIEW.Application");
    		if (pLV == NULL)
    		{
    			printf("LV must be running, exiting ...\n");
    			break;
    		}
    		pVI.CreateInstance("LabVIEW.VirtualInstrument");
    	    strcpy(Path, pLV->ApplicationDirectory);
    		strcat(Path, VIPath);
     
    		// assign an object reference to the pVI.
    		pVI = pLV->GetVIReference(LPCTSTR(Path));
     
    		// configure the VI to show its front panel on Call.
    		pVI->ShowFPOnCall = TRUE;
     
    		pVI->SetControlValue("device","1");
    		pVI->SetControlValue("channel", "0");
     
    		//Transfer control to LabVIEW with the Run statement.  The call function passes the parameter names
    		// and data to the LabVIEW VI.
    		pVI->Run();
    		sample = pVI->GetControlValue("sample");
    		printf("The sample Value is %f \n", sample.fltVal);
    		while( !kbhit() )
    		cout << "Hit any key to continue\r";
    		fflush( stdin );
    		pLV->AutomaticClose=0;
     
    	} while (0);
    	CoUninitialize();
    	return (0);
    }
    j'ai un problème au niveau du CreateInstance, il m'affiche
    LV must be running, exiting ...
    càd que le pLV est null et il n'y avait pas de creation de l'ainstance de l'application

    Merci d'avance

  11. #11
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    Citation Envoyé par 3aychoucha Voir le message
    c'est un activeX Automation server et moi je veux faire la partie client
    J'imagine que l'utilisation d'un activeX Automation server est un peu plus complexe qu'une simple dll COM. Il doit y avoir de la gestion droits d'utilisateurs en plus. Je vais me renseigner un peu plus, mais la réponse devrait se trouver sur les sites de la MSDN.

    Je ne comprends pas la phrase "je veux faire la partie client", un activeX on l'utilise dans un programme...

  12. #12
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    En regardant 5 minutes sur le net, j'ai trouvé sur le site de LabView, un code source qui explique l'utilisation de cet activeX (lvdemo.zip):

    http://zone.ni.com/devzone/cda/epd/p/id/750

    L'avez-vous téléchargé ?

  13. #13
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut
    Bonjour,

    le code que je l'ai affiché je l'ai pris aussi du site de labView
    http://zone.ni.com/devzone/cda/epd/p...#0requirements
    mais au niveau de "GetVIReference", une exeption est générée
    Exception Microsoft C++*: _com_error à l'emplacement mémoire 0x002ae944..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pb pour associé un fichier chm avec un projet MFC
    Par Cédric_07 dans le forum MFC
    Réponses: 9
    Dernier message: 05/12/2006, 15h56
  2. Réponses: 2
    Dernier message: 03/07/2006, 20h14
  3. intégrer un fichier image dans une base de donnée?
    Par Lody dans le forum Requêtes
    Réponses: 9
    Dernier message: 16/03/2006, 19h08
  4. Réponses: 11
    Dernier message: 13/03/2006, 17h51
  5. Réponses: 4
    Dernier message: 24/05/2005, 11h34

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