Eléments de la bibliothèque de types

De RAD Studio
Aller à : navigation, rechercher

Remonter à Editeur de bibliothèques de types


Au premier abord, l'interface d'une bibliothèque de types représentée dans l'éditeur de bibliothèque de types peut sembler un peu complexe. Cela est du au fait qu'elle présente des informations sur un grand nombre d'éléments, chacun ayant des caractéristiques spécifiques. Cependant, la plupart de ces caractéristiques sont communes à tous les éléments. Ainsi, chaque élément (dont la bibliothèque de types) dispose des caractéristiques suivantes :

  • Nom, qui est utilisé pour décrire l'élément et désigner l'élément dans du code.
  • GUID (identificateur global unique) qui est une valeur unique de 128 bits utilisée par COM pour identifier l'élément. Cette valeur doit toujours être fournie pour la bibliothèque de types, les CoClasses et les interfaces. Sinon elle est facultative.
  • Numéro de version, qui distingue différentes versions de l'élément. Cette information est toujours facultative, mais elle doit être spécifiée pour les CoClasses et les interfaces car certains outils ne peuvent les utiliser si elles n'ont pas un numéro de version.
  • Propriétés de l'aide liant l'élément à une rubrique d'aide. Elles sont constituées d'une chaîne d'aide, d'un contexte d'aide ou d'une valeur de contexte de chaîne d'aide. Le contexte d'aide est utilisé avec le système d'aide classique Windows si la bibliothèque d'aide dispose d'un fichier d'aide autonome propre. Le contexte de chaîne d'aide est utilisé quand l'aide est fournie par une DLL distincte. Le contexte d'aide ou le contexte de chaîne d'aide fait référence à un fichier d'aide ou une DLL dont le nom est spécifié dans la page Attributs de la bibliothèque de types. Ces informations sont toujours facultatives.

Interfaces

L'interface décrit les méthodes (et les propriétés exprimées comme fonctions get et set) d'un objet auquel il faut d'accéder via une table de fonction virtuelle (vtable). Si une interface est définie comme double, elle hérite de IDispatch, et votre objet peut fournir un accès vtable à liaison anticipée et une liaison d'exécution via l'automation OLE. Par défaut, la bibliothèque de types marque toutes les interfaces ajoutées comme double.

Il est possible d'attribuer des membres aux interfaces : des méthodes et des propriétés. Elles apparaissent dans le volet liste des objets comme enfant du noeud interface. Les propriétés des interfaces sont représentées par les méthodes get et set utilisées pour lire et écrire les données sous-jacentes de la propriété. Elles sont représentées dans la vue arborescente par des icônes spéciales qui indiquent leur fonction.

Icônes spéciales pour les méthodes 'get' et 'set':



Putprop.jpg

Une fonction en écriture (set, put) par valeur.

Refprop.jpg

Une fonction en lecture (get) |écriture (set, put) par référence.

Getprop.jpg

Une fonction en lecture (get) de la propriété.



Remarque :  Ecriture par référence : Si une propriété est spécifiée comme "Ecriture par référence", elle est transmise comme pointeur et non par valeur. Certaines applications, comme Visual Basic, utilisent si possible l'écriture par référence pour optimiser les performances. Pour passer une propriété uniquement par référence plutôt que par valeur, utilisez le type de propriété Par référence seulement. Pour passer la propriété par référence ainsi que par valeur, sélectionnez Lecture > Ecriture > Ecriture par référence. Pour invoquer ce menu, allez sur la barre d'outils et sélectionnez la flèche vers le bas en regard de l'icône propriété.

Après l'ajout des propriétés et méthodes en utilisant les boutons de la barre d'outils ou le menu contextuel du volet liste des objets, vous pouvez décrire leur syntaxe et leurs attributs en sélectionnant la propriété ou la méthode et en utilisant les pages d'informations de type.

La page Attributs vous permet d'attribuer un nom à la propriété ou méthode et un identificateur de répartition (afin de pouvoir l'appeler en utilisant IDispatch). Pour les propriétés, vous pouvez également attribuer un type. La signature de fonction est créée en utilisant la page Paramètres qui vous permet d'ajouter, de supprimer ou d'organiser les paramètres, de définir leur type et les modificateurs et de spécifier le type de retour de la fonction.

Remarque :  Les membres des interfaces qui veulent déclencher des exceptions doivent renvoyer un HRESULT et spécifier un paramètre de valeur renvoyée (PARAM_RETVAL) pour la valeur réellement renvoyée. Déclarez ces méthodes en utilisant la convention d'appel safecall.

Si vous attribuez des propriétés et des méthodes à une interface, elles sont implicitement attribuées à sa CoClasse associée. C'est pour cela que l'éditeur de bibliothèque de types ne vous permet pas d'ajouter directement des méthodes ou des propriétés à une CoClasse.

Dispinterfaces

Les interfaces sont plus fréquemment utilisées que les dispinterfaces pour décrire les propriétés et méthodes d'un objet. Les dispinterfaces sont accessibles uniquement au travers d'une liaison dynamique alors que les interfaces peuvent aussi utiliser une liaison statique grâce à une vtable.

Vous pouvez ajouter des propriétés et méthodes aux dispinterfaces comme pour les interfaces. Cependant, quand vous créez une propriété pour une dispinterface, vous ne pouvez spécifier le type de fonction ou le type des paramètres.

CoClasses

Une CoClasse décrit un objet COM unique qui implémente une ou plusieurs interfaces. Quand vous définissez une CoClasse, vous devez spécifier l'interface implémentée qui est celle par défaut pour l'objet et, de manière facultative, la dispinterface qui est la source par défaut des événements. Il n'est pas possible d'ajouter directement des propriétés ou méthodes à une CoClasse dans l'éditeur de bibliothèque de types. Les propriétés et méthodes sont exposées aux clients par les interfaces, qui sont associées à la CoClasse avec la page Implémente.

Définitions de types

Les énumérations, les alias, les enregistrements et les unions déclarent des types qui peuvent ensuite être utilisés ailleurs dans la bibliothèque de types.

Les énumérations sont constituées d'une liste de constantes numériques. Ces constantes sont généralement des valeurs entières au format décimal ou hexadécimal. La valeur de base par défaut est zéro. Vous pouvez ajouter des constantes à une énumération en la sélectionnant dans le volet liste des objets, puis en cliquant sur le bouton Constante de la barre d'outils ou en sélectionnant la commande Nouveau > Const dans le menu contextuel du volet liste des objets.

Remarque :  Il est fortement conseillé de spécifier une chaîne d'aide pour les énumérations. Voici un exemple d'entrée d'un type énumération pour un bouton de souris qui inclut une chaîne d'aide pour chacun des éléments de l'énumération :



 mbLeft = 0 [helpstring 'mbLeft'];
 mbRight = 1 [helpstring 'mbRight'];
 mbMiddle = 3 [helpstring 'mbMiddle'];



 typedef enum TxMouseButton
 {
 [helpstring("mbLeft")]
 mbLeft = 0,
 [helpstring("mbRight)]
 mbRight = 1.
 [helpstring("mbMiddle)]
 mbMiddle = 2
 } TxMouseButton;



Un alias définit un alias (une définition de type) pour un type. Un alias permet de définir des types s'utilisant dans d'autres types, par exemple des enregistrements ou des unions. Associez l'alias au type sous-jacent en spécifiant l'attribut Type dans la page Attributs.

Un enregistrement est constitué de la liste des membres de la structure, ou champs. Une union est un enregistrement ayant seulement une partie de type variant. Comme un enregistrement, une union est constituée de la liste des membres de la structure, ou champs. Mais, à la différence des membres d'un enregistrement, tous les membres d'une union occupent le même emplacement physique, il n'est donc possible de stocker qu'une seule valeur logique.

Ajoutez les champs à un enregistrement ou une union en le sélectionnant dans le volet liste des objets puis en choisissant le bouton Champ de la barre d'outils ou en utilisant le menu contextuel du volet liste des objets. Chaque champ dispose d'un nom et d'un type que vous pouvez spécifier en sélectionnant le champ et en attribuant les valeurs dans la page Attributs. Les enregistrements et les unions peuvent être définis avec un repère optionnel.

Les membres peuvent être de n'importe quel type prédéfini. Vous pouvez aussi spécifier un type en utilisant un alias avant de définir l'enregistrement.

Modules

Un module définit un groupe de fonctions, généralement un ensemble de points d'entrée de DLL. Vous définissez un module en :

  • Spécifiant la DLL qu'il représente dans la page Attributs.
  • Ajoutant des méthodes et des constantes en utilisant la barre d'outils ou le menu contextuel du volet liste des objets. Vous devez ensuite spécifier les attributs de chaque méthode ou constante en la sélectionnant dans le volet liste des objets, puis en définissant les valeurs dans la page Attributs.

Pour les méthodes de module, vous devez spécifier dans la page Attributs un nom et un point d'entrée dans la DLL. Déclarez les paramètres de la fonction et le type de valeur renvoyé dans la page Paramètres.

Pour les constantes de module, utilisez la page Attributs pour spécifier le nom, le type et la valeur.

Remarque :  L'éditeur de bibliothèque de types ne génère aucune déclaration ou implémentation associée à un module. La DLL spécifiée doit être créée dans un projet séparé.

Voir aussi