– Objets globaux et bibliothèques de codes
– Évolutivité et traitement multithread
– Rappels et événements asynchrones
– Affichage de feuilles à partir de composants de code
– Création d’objets dans les composants Visual Basic
– Effets de la liaison sur les performances des composants ActiveX
– Effets de la redirection sur les performances des composants ActiveX
Objets globaux et bibliothèques de codes
Vous pouvez créer des bibliothèques de procédures universelles dans Visual Basic en créant les méthodes de procédures dans un module de classe. Attribuez à la propriété Instancing du module de la classe n’importe quelle valeur à l’exception de Private et PublicNotCreatable, afin que les clients puissent créer des instances de la classe. Lorsque vous choisissez la valeur GlobalMultiUse pour la propriété Instancing d’une
classe, puis créez le projet, vous pouvez utiliser les propriétés et les méthodes de la classe sans devoir créer explicitement une instance de cette dernière. Les propriétés et les méthodes d’un objet GlobalMultiUse (ou objet global) sont ajoutées à l’espace de noms global de tout projet utilisant l’objet. Vous pouvez donc définir dans un autre projet une référence au composant. Les noms des propriétés et des méthodes de l’objet global seront entièrement reconnus, comme s’ils faisaient partie de Visual Basic.
Création de propriétés Object pour des objets globaux
Certaines propriétés des objets <globales> sont elles-mêmes des objets (par exemple, l’objet App et la collection Printers). Vous pouvez créer des propriétés d’objet similaires pour vos propres classes globales.
Supposons que vous avez créé une classe Registry pour accéder à la base de registres de Windows, et que vous avez une classe Globals dont la propriété Instancing a la valeur GlobalMultiUse. L’extrait de code suivant indique comment ajouter une propriété Registry à votre classe Globals :
Private mRegistry As Registry
Private Sub Class_Initialize()
Set mRegistry = New Registry
End Sub
Public Property Get Registry() As Registry
Set Registry = mRegistry
End Sub
Directives et restrictions
Les informations suivantes vous seront utiles pour tirer parti des objets globaux :
– Les constantes que vous fournissez en utilisant Enums sont des entiers de type Long ; vous pouvez utiliser des objets globaux pour fournir des chaînes et des constantes à virgule flottante, tel qu’indiqué dans la section « Attribution de constantes nommées à votre composant » du chapitre 6 « Principes généraux de création des composants ».
– Lorsque vous rencontrez des conflits de nom, utilisez le nom de la bibliothèque de types du composant pour résoudre le conflit.
Par exemple, supposons que vous utilisez MyUtilities et YourUtilities, et que YourUtilities comporte une classe GlobalMultiUse nommée General qui inclut également une méthode nommée LeastReasonableReturn. Vous devez utiliser le code suivant pour vous assurer que la méthode contenue dans YourUtilities est employée :
Private Sub cmdCalculateResult_Click()
txtResult.Text = _
YourUtilities.LeastReasonableReturn( _CCur(txtBeginningBalance.Text))
End Sub
Restrictions relatives aux objets GlobalMultiUse
Lorsque vous déterminez s’il convient d’utiliser un objet global ou de déclarer explicitement une variable pour contenir une instance d’un objet, tenez compte des remarques ci-dessous :
– Vous ne pouvez pas attribuer la valeur Nothing à une référence cachée d’un objet global lorsque vous avez terminé de l’utiliser. Visual Basic n’offre aucune possibilité d’accéder directement à l’objet global caché.
– GlobalMultiUse est très pratique pour les programmeurs ; ceci induit une légère baisse des performances lors de l’appel à une procédure, comme lors de l’emploi d’une variable globale déclarée As New (par exemple, As New Financials).
– Les propriétés et les méthodes d’un objet GlobalMultiUse ne font pas partie de l’espace de noms global du composant fournissant l’objet. Par exemple, dans le composant qui fournit l’objet Financials, vous devez créer explicitement une instance de Financials pour utiliser la procédure LeastReasonableReturn.
– Vous ne pouvez pas utiliser d’objets globaux pour remplacer les procédures globales dans les bibliothèques VB et VBA. Ces bibliothèques apparaissent toujours en haut de la boîte de dialogue Références, avant toutes les autres bibliothèques. Les procédures portant le même nom dans un objet global ne sont accessibles qu’en qualifiant les noms de procédure avec le nom de la bibliothèque de types.
Évolutivité et traitement multithread
Lorsqu’un composant comporte une thread d’exécution, seul le code d’un objet peut être exécuté à la fois. La fonction Automation du modèle d’objet composant (COM, Component Object Model) gère cette situation en sérialisant les requêtes. Les requêtes sont ainsi placées en file d’attente et traitées une à une jusqu’à la dernière. Dans un environnement multithread, la sérialisation protège les objets mono-thread contre le chevauchement des requêtes client (exécution du code d’une propriété ou d’une méthode en même temps qu’une ou plusieurs requêtes de client précédentes). Le chevauchement de requêtes peut provoquer des erreurs de données internes si la conception des objets ne prévoit pas la réentrance, tel qu’indiqué à la section « Modèle d’ordonnancement de threads cloisonné dans Visual Basic ».
Modèle d’ordonnancement de threads cloisonné dans Visual Basic
Dans Visual Basic, le Modèle d’ordonnancement de threads cloisonné est utilisé pour garantir la sécurité des threads. Dans ce modèle, chaque thread est comparable à un appartement. Tous les objets créés dans la thread vivent dans cet appartement et ne connaissent pas l’existence des objets dans d’autres appartements. Le modèle d’ordonnancement de threads cloisonné de Visual Basic élimine les conflits d’accès aux données globales à partir de plusieurs threads en attribuant à chaque appartement sa propre copie des données globales, comme le montre la figure 8.3.
…..