Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

Vous n'avez pas encore de compte Developpez.com ? L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Developpez.com

C++

Choisissez la catégorie, puis la rubrique :

logo
Sommaire > MS Office > Généralités
        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 ?



Comment savoir si une application COM est en cours d'exécution ?
Créé le 27/10/2004[haut]
auteurs : Ricky81, Laurent Dardenne
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.

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.");
}

Où peut-on trouver les constantes utilisées par Word, Excel, ..., ?
Créé le 27/10/2004[haut]
auteur : Ricky81
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.


Qu'est ce que le type Variant ?
Créé le 27/10/2004[haut]
auteur : Ricky81
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

lien : faq Comment convertir un AnsiString en Variant ?

Quel est l'équivalent de NULL pour les paramètres facultatifs en pilotage OLE ?
Créé le 27/10/2004[haut]
auteur : Ricky81
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 :

Variant vMSExcel; // vMSExcel est à Unassigned
vMSExcel = Variant::GetActiveObject("Excel.Application");
vMSExcel.OleFunction("Quit");
vMSExcel = Unassigned; // libération de la mémoire
lien : faq Qu'est ce que le type Variant ?

Comment convertir un AnsiString en Variant ?
Créé le 27/10/2004[haut]
auteur : Ricky81
Il faut utiliser la fonction StringToOleStr

extern PACKAGE wchar_t * __fastcall StringToOleStr(const AnsiString Source);
lien : faq Qu'est ce que le type Variant ?
lien : faq Pourquoi ai-je une erreur lorsque je passe un AnsiString comme paramètre dans un appel OLE ?

Pourquoi ai-je une erreur lorsque je passe un AnsiString comme paramètre dans un appel OLE ?
Créé le 27/10/2004[haut]
auteur : Ricky81
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.

lien : faq Comment convertir un AnsiString en Variant ?
lien : faq Qu'est ce que le type Variant ?


Consultez les autres F.A.Q.


Valid XHTML 1.0 TransitionalValid CSS!

Les 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 © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.

Contacter le responsable de la rubrique C++

Partenaire : Hébergement Web