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
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
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.
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..
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 :
Evidemment il faudra remplacer par les bons noms. A partir de là intellisense fonctionnera.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #import "ControleActiveX.tlb" raw_interfaces_only using namespace ControleActiveX;
Exemple d'utilisation :
Bien sûr, c'est juste un exemple, les noms de méthodes et les paramètres seront différents.
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; }
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).
Open Source Microsoft MediaFoundation
https://github.com/mofo7777
http://jeux.developpez.com/faq/directx/?page=dshow
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
moldavi, est ce que vous pouvez svp m'expliquer un peu le code
UneMethode(Bstr, &lRet) représente quoi?
comment par exemple je peux afficher l'interface associée à mon tlb (c'est un .vi)
Merci d'avance
Bonjour.
Quel compilateur utilisez-vous ?
Avec seulement ces deux lignes
et avec visual studio 2008, intellisense m'affiche les interfaces et les méthodes. Bien sur dans mon cas, je les connais d'avance, puisque j'ai écris la dll managed.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #import "ControleActiveX.tlb" raw_interfaces_only using namespace ControleActiveX;
Il faut au moins connaître le namespace, et il peut y en avoir plusieurs.
Pour que intellisense m'affiche les données, je tape "ControleActiveX::", et là j'ai tout.
Open Source Microsoft MediaFoundation
https://github.com/mofo7777
http://jeux.developpez.com/faq/directx/?page=dshow
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é.
Open Source Microsoft MediaFoundation
https://github.com/mofo7777
http://jeux.developpez.com/faq/directx/?page=dshow
merci moldavi,
j'ai pu importer mon tlb mais lorsque je veux créer une instance de l'objet, ça retourne NULL
voici le code:
Avec un .dll le problème se résout par l'installation du dll avec regsvr32, pourtlb ça n'a pas marché avec regtlib
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 HRESULT hres=pLV.CreateInstance("MyNameSpace.Application"); if (pLV == NULL) { AfxMessageBox(_T("LV must be running, exiting ...\n")); break; }
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
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.
Open Source Microsoft MediaFoundation
https://github.com/mofo7777
http://jeux.developpez.com/faq/directx/?page=dshow
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:
j'ai un problème au niveau du CreateInstance, il m'affiche
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); }càd que le pLV est null et il n'y avait pas de creation de l'ainstance de l'applicationLV must be running, exiting ...
Merci d'avance
Bonjour.
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...
Open Source Microsoft MediaFoundation
https://github.com/mofo7777
http://jeux.developpez.com/faq/directx/?page=dshow
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é ?
Open Source Microsoft MediaFoundation
https://github.com/mofo7777
http://jeux.developpez.com/faq/directx/?page=dshow
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éeException Microsoft C++*: _com_error à l'emplacement mémoire 0x002ae944..
Bonjour.
Utilises un bloc try/catch et récupère la ComException.
Il y a deux méthodes, une avec password, l'autre sans.
Open Source Microsoft MediaFoundation
https://github.com/mofo7777
http://jeux.developpez.com/faq/directx/?page=dshow
Comment je peux le faire
je suis débutante en C++
Bonjour,
même si je mets le bloc entre un try et catch, ça ne résout pas le problème et l'exception s'affiche dans la console de VS au lieu de s'afficher dans une boite de dialogue: en fait ça change rien
Merci
il faut vérifier que le tlb est bien enregistré (avec regtlibv12)c un peu délicat mais ça marche enfin
juste il faut trop de patience![]()
Partager