FAQ C++ BuilderConsultez toutes les FAQ
Nombre d'auteurs : 60, nombre de questions : 670, dernière mise à jour : 21 novembre 2010 Ajouter une question
Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forum C++ Builder de developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette F.A.Q. ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette F.A.Q. ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, contactez pottiez
Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous vous souhaitons une bonne lecture.
L'équipe C++ Builder de Developpez.
Commentez cette FAQ : Commentez
- Comment savoir si une application COM est en cours d'exécution ?
- Où peut-on trouver les constantes utilisées par Word, Excel, ..., ?
- Quelle entête faut-il ajouter pour utiliser le pilotage OLE ?
- Qu'est ce que le type Variant ?
- Quel est l'équivalent de NULL pour les paramètres facultatifs en pilotage OLE ?
- Comment convertir un AnsiString en Variant ?
- Pourquoi ai-je une erreur lorsque je passe un AnsiString comme paramètre dans un appel OLE ?
La méthode GetActiveOleObject renvoie une référence à l'interface IDispatch de l'objet actif pour la classe indiquée par ClassName. ClassName est l'ID de programmation de la classe de l'objet actif dans la table des objets OLE actifs.
GetActiveOleObject permet d'accéder à cette table. Cette table permet donc de déterminer si un objet d'une classe donnée est en cours d'exécution ou non.
La méthode OleCheck, appelée par GetActiveOleObject, déclenche une exception EOleSysError si aucun objet de la classe spécifiée n'existe.
Code c++ : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | bool AppExist = true; Variant vMSWord; try { vMSWord = Variant::GetActiveObject("Word.Application"); } catch (EOleSysError &e) { AppExist = false; } if(AppExist) { ShowMessage("Word est en cours d'exécution."); } else { ShowMessage("Word n'est pas en cours d'exécution."); } |
Vous pouvez trouver les constantes directement dans l'application en ouvrant une fenêtre Visual Basic (ALT+F11) puis en consultant l'explorateur d'objets. Une petite recherche et vous obtiendrez la valeur d'une constante à partir de son nom.
Vous pouvez également trouver une partie des constantes dans le header Excel_2k.h en ce qui concerne Excel (présent dans Include/VCL/ et vous pouvez même utiliser directement les noms des constantes dans votre programme en incluant ce fichier.
Il faut ajouter utilcls.h.
Code c++ : | Sélectionner tout |
#include <utilcls.h>
Le type Variant est capable de représenter des valeurs qui changent de type dynamiquement. Alors qu'une variable de n'importe quel autre type est liée statiquement à ce type, une variable de type Variant peut prendre des valeurs de plusieurs types lors de l'exécution. Le type Variant est généralement utilisé quand le véritable type à manipuler varie ou qu'il n'est pas connu lors de la compilation. Cette souplesse se fait au dépend de la mémoire et les opérations sont substantiellement moins rapides que les opérations sur des valeurs statiquement typées.
Voici les types supportés par le Variant :
- short
- int
- float
- double
- Currency
- TDateTime
- bool
- WordBool
- Byte
- AnsiString&
- char *
- wchar_t * const
- Ole2::IDispatch* const
- Ole2::IUnknown* const
Les paramètres facultatifs doivent être passés comme des Variants Unassigned.
Tout Variant est initialisé à Unassigned lorsqu'il est déclaré, et l'affectation de Unassigned à un Variant permet de libérer la mémoire occupée.
Exemple :
Code c++ : | Sélectionner tout |
1 2 3 4 | Variant vMSExcel; // vMSExcel est à Unassigned vMSExcel = Variant::GetActiveObject("Excel.Application"); vMSExcel.OleFunction("Quit"); vMSExcel = Unassigned; // libération de la mémoire |
Il faut utiliser la fonction StringToOleStr
Code c++ : | Sélectionner tout |
extern PACKAGE wchar_t * __fastcall StringToOleStr(const AnsiString Source);
Le pilotage OLE repose sur le type Variant, or le type AnsiString n'est pas supporté par le Variant. Vous pouvez par exemple passer le pointeur sur votre AnsiString grâce à la méthode c_str()ou effectuer la conversion.
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.