COM automation à l'aide de fichier tlb
Tenez-moi pour un novice à l'environnement windows et la programmation COM.
J'ai pour automatiser une application (Canoë). Canoë expose lui-même en tant que serveur COM et fournit Canoë.h , CANoe_i.c et le Canoë.fichiers tlb.
Quelqu'un peut-il préciser comment écrire une C++ client, pour l'accès à l'objet, les fonctions de l'application.
Aussi, veuillez indiquer comment accéder au code présent dans le fichier tlb à partir de C++.
OriginalL'auteur | 2009-06-24
Vous devez vous connecter pour publier un commentaire.
Visual studio a beaucoup de construit en charge l'importation de bibliothèques de types dans votre projet C++ en utilisant les objets ainsi définis. Par exemple, vous pouvez utiliser le
#import
directive:Cela permettra d'importer la bibliothèque de type, et les convertir en fichiers d'en-tête et les fichiers de mise en œuvre - aussi à cause de la mise en œuvre des fichiers à être construit avec votre projet et les fichiers d'en-tête, c'est beaucoup de magie trucs là.
Puis, vous obtenez tout un tas de typedefs de pointeur intelligent des wrappers pour les types et les objets définis dans la bibliothèque de type. Par exemple, si il y avait une Coclasse appelé
Application
qui a mis en place l'interfaceIApplication
, vous pourriez faire ceci:Ce serait la cause au moment de l'exécution, la coclasse demande à être créé et lié à la variable
app
, et vous pouvez les appeler de la sorte:Erreur de manipulation se fait en vérifiant le résultat des appels COM, et en jetant l'appropriées _com_error exception comme nécessaire, donc cela implique que vous devez à l'exception d'écriture en toute sécurité.
OriginalL'auteur 1800 INFORMATION
Utilisation
import
directive à l'importation .fichier tlb - cela vous donnera un C++ équivalent des interfaces exposées par le composant COM.Vous devrez également enregistrer le composant COM pour le registre (exécuter regsvr32 sur le .dll fichier du composant). Après cela, vous pouvez appeler CoCreateInstance() (ou _com_ptr_t::CreateInstance (), car il est généralement plus pratique) pour créer une instance de la classe qui implémente l'interface. Vous pouvez appeler les méthodes de l'interface - il fonctionnera presque de la même manière, comme si c'était une simple interface C++ et de la classe.
Je vous suggère d'essayer de le résoudre et si vous ne gérez pas juste de poser une question distincte en fournissant suffisamment de détails.
OriginalL'auteur sharptooth
Le moyen le plus facile est d'inclure à la fois .h et _i.c votre projet dans la .rpc fichier à l'aide de
#include
consolidés.Puisque vous n'avez pas eu la dll et seulement tlb est fourni, vous pouvez enregistrer le tlb à l'aide de regtlibv12.exe qui est une partie de visual studio (c'est le VS2005 version). En vous inscrivant tlb, les entrées appropriées sera faite dans le registre, puis vous pouvez utiliser la bibliothèque COM fonctionnalités que vous avez besoin.
EDIT: BTW, vous avez besoin de la DLL de toute façon pour instancier le Composant COM avec succès.
Pour créer un pointeur d'interface, l'un des plus sûrs moyens est d'utiliser CComPTR comme:
Oui, mais il est tout à fait possible que le fichier tlb ne contient les définitions d'interface et doit être enregistré séparément. Vous avez raison au sujet de DLL mais qu'il devrait avoir à instancier le composant.
Eh bien, vous êtes juste à propos de la tlb distinct de l'enregistrement. Mais c'est un dernier recours de la pratique généralement utilisé lorsque le composant COM est incomplète COM de soutien et ne prend pas en charge DllRegisterServer et DllGetClassObject.
Cela peut être fait à des endroits où vous souhaitez conserver les Définitions d'Interface distincte de leurs implémentations. par exemple, une Interface qui doit être mis en œuvre différemment dans plusieurs Composants COM, une telle interface peut être déplacé et un tlb distinct peut être créé pour cette interface. Tous les composants de la mise en œuvre de cette interface sera tout simplement importer que tlb et aller à partir de là.
OriginalL'auteur Aamir