Encore et toujours un titre pas très clair... pardonnez moi.
J'avoue que je ne voyais pas trop quoi écrire.
Vous connaissez tous l'instruction GetObject, non ?
... non ? Certains ignorent à quoi sert cette instruction VB ?
Rien de dramatique, nous allons reprendre un peu la partie théorique.
Certains Exe, comme par exemple Excel sont en réalité des Exe ActiveX...
Pas très utile de savoir cela, en ces termes.
Un Exe ActiveX est en gros un exe qui exporte des objets COM, tout comme le ferait une Dll ActiveX toute bête...
l'Exe ActiveX a pourtant un avantage qui est de tourner dans son propre process...
Il est donc par ce biais possible de faire du multithread en VB6 (faire tourner plusieurs traitements en parallèle).
Vous avez tous sûrement vu du code qui ressemblait à cela :
Set oExcel = CreateObject("Excel.Application")
Ici, nous créons une nouvelle instance d'un objet étiquetté Excel.Application (il s'agit du CLSID de l'objet en question...)
Pourtant, plutôt que de créer une nouvelle instance, nous pourrions nous greffer sur une instance existante (dite instance active) de notre objet, a supposer qu'une telle instance ait été créée...
Outre le fait de manipuler un objet commun, cette petite astuce est utile avec Excel, pour obtenir plus rapidement un objet Excel.Application.
Nous pouvons par exemple faire :
On Local Error Resume Next
Set oExcel = GetObject(,"Excel.Application")
If Nothing Is oExcel Then
Set oExcel = CreateObject("Excel.Application")
End If
pour récupérer une instance de Excel (on en créé une nouvelle si besoin)
- A quoi cela peut il servir ?
Dans un précédent job, nous avions entièrement séparé l'appli pour constituer un Exe ActiveX avec le noyau du de l'application, et une barre d'outil toute bête pour l'interface. l'interface ne faisait rien... elle ne pouvait pas crasher.
le noyau, lui, c'etait une autre histoire. mais les crashes de ce dernier passaient inapercus, vu que l'interface ne crashait pas... il suffisait alors de relancer un noyau et de restaurer la session de travail.
le tout est a piloter via des objets COM, on a donc accès aux evenements, propriétés, méthodes... tout ce qu'il faut pour établir une communication efficace, quoi.
- très bien, mais quel rapport avec la présente source ?
Bonne question, merci de l'avoir posée.
en fait, VB6 vous permet de créer des Exe ActiveX. Il sera donc possible de faire joujou avec du MultiThread.
MAIS, GetObject (attention a la syntaxe de l'appel, il y a bien une virgule qui traine) sert a retrouver les instances des objets enregistrés dans la ROT (Running Object Tables)
ce petit module fournis simplement deux fonctions pour ajouter ou supprimer des objets de la ROT... et donc fournir un support de GetObject a vos objets issus d'Exe ActiveX