Partager via


Interaction.GetObject, méthode

Retourne une référence à un objet fourni par un composant COM.

Espace de noms : Microsoft.VisualBasic
Assembly : Microsoft.VisualBasic (dans microsoft.visualbasic.dll)

Syntaxe

'Déclaration
Public Shared Function GetObject ( _
    <OptionalAttribute> Optional PathName As String = Nothing, _
    <OptionalAttribute> Optional Class As String = Nothing _
) As Object
'Utilisation
Dim PathName As String
Dim Class As String
Dim returnValue As Object

returnValue = Interaction.GetObject(PathName, Class)
public static Object GetObject (
    [OptionalAttribute] string PathName,
    [OptionalAttribute] string Class
)
public:
static Object^ GetObject (
    [OptionalAttribute] String^ PathName, 
    [OptionalAttribute] String^ Class
)
public static Object GetObject (
    /** @attribute OptionalAttribute() */ String PathName, 
    /** @attribute OptionalAttribute() */ String Class
)
public static function GetObject (
    PathName : String, 
    Class : String
) : Object

Paramètres

  • PathName
    Facultatif. String. Chemin d'accès complet et nom du fichier contenant l'objet à récupérer. Si PathName est omis, Class est requis.
  • Class
    Requis si PathName n'est pas fourni. String. Chaîne représentant la classe de l'objet. L'argument Class emploie la syntaxe et les paramètres suivants :

    appname.objecttype

    Paramètre

    Description

    appname

    Obligatoire. String. Nom de l'application qui fournit l'objet.

    objecttype

    Obligatoire. String. Type ou classe de l'objet à créer.

Valeur de retour

Retourne une référence à un objet fourni par un composant COM.

Notes

Pour plus d'informations, consultez la rubrique Visual Basic GetObject, fonction (Visual Basic).

Utilisez la fonction GetObject pour charger une instance d'un composant COM à partir d'un fichier. L'exemple suivant illustre ce comportement :

Dim CADObject As Object
CADObject = GetObject("C:\CAD\schema.cad")

Lorsque ce code est exécuté, l'application associée au PathName spécifié démarre et l'objet dans le fichier spécifié est activé.

Cas par défaut

Si PathName est une chaîne de longueur nulle (""), GetObject retourne une nouvelle instance d'objet du type de classe spécifié. Si l'argument PathName est omis, GetObject retourne un objet actuellement actif du type de classe spécifié dans Class. Si aucun objet du type spécifié n'existe, une erreur se produit.

Accès à un sous-objet

Certaines applications vous permettent d'activer un sous-objet associé à un fichier. Pour ce faire, ajoutez un point d'exclamation (!) à la fin du nom du fichier et faites suivre ce dernier d'une chaîne identifiant la partie du fichier à activer. Pour plus d'informations sur la création de cette chaîne, consultez la documentation de l'application qui a créé l'objet.

Dans une application de dessin, par exemple, un fichier peut contenir un dessin constitué de plusieurs couches. Le code suivant vous permet d'activer un plan d'un dessin nommé schema.cad.

layerObject = GetObject("C:\CAD\schema.cad!Layer3")

Spécification d'une classe

Si vous ne spécifiez pas l'argument Class de l'objet, Automation se base sur le nom de fichier que vous fournissez pour déterminer l'application à démarrer et l'objet à activer. Cependant, certains fichiers peuvent prendre en charge plusieurs classes d'objets. Par exemple, un dessin peut comporter un objet Application, un objet Drawing et un objet Toolbar, chacun faisant partie du même fichier. Pour spécifier l'objet à activer parmi ceux du fichier, utilisez l'argument facultatif Class. L'exemple suivant illustre ce comportement :

Dim drawObj As Object
drawObj = GetObject("C:\Drawings\sample.drw", "Figment.Drawing")

Dans l'exemple, Figment est le nom d'une application de dessin et Drawing est l'un des types d'objets pris en charge par cette application.

Utilisation de l'objet

Une fois un objet activé, vous y faites référence dans le code à l'aide de la variable objet que vous avez déclarée. Dans l'exemple précédent, vous accédez aux propriétés et aux méthodes du nouvel objet en utilisant la variable objet drawObj. L'exemple suivant illustre ce comportement :

drawObj.Line(9, 90)
drawObj.InsertText(9, 100, "Hello, world.")
drawObj.SaveAs("C:\Drawings\sample.drw")

Notes

Utilisez la fonction GetObject s'il existe une instance actuelle de l'objet, ou lorsque vous souhaitez créer l'objet avec un fichier chargé. S'il n'existe aucune instance en cours et si vous ne souhaitez pas démarrer l'objet en chargeant un fichier, utilisez la fonction CreateObject (Visual Basic).

Si un objet s'est inscrit comme objet à instance unique Active-X, une seule instance de l'objet est créée quel que soit le nombre d'appels à CreateObject. Avec un objet à instance unique, la fonction GetObject retourne toujours la même instance lorsqu'elle est appelée à l'aide de la syntaxe de chaîne de longueur nulle (""). En outre, elle produit une erreur si l'argument PathName est omis. Vous ne pouvez pas utiliser GetObject pour obtenir une référence à une classe créée avec Visual Basic.

Remarque de sécuritéRemarque de sécurité

La fonction GetObject nécessite une permission de code non managée, qui peut affecter son exécution dans les situations de confiance partielle. Pour plus d'informations, consultez SecurityPermission et Autorisations d'accès du code.

Exemple

L'exemple suivant utilise la fonction GetObject pour obtenir une référence à une feuille de calcul Microsoft Excel spécifique (excelObj). Il utilise la propriété Application de la feuille de calcul pour rendre Excel visible, pour le fermer, et pour exécuter d'autres actions. En utilisant deux appels API, la procédure detectExcel recherche Excel et, si ce programme est en cours d'exécution, l'entre dans la table ROT (Running Object Table). Le premier appel à GetObject provoque une erreur si Excel ne s'exécute pas déjà, lequel dans cet exemple engendre l'affectation de l'indicateur excelWasNotRunning à True. Le deuxième appel à GetObject spécifie un fichier à ouvrir. Si Excel n'est pas déjà en cours d'exécution, le deuxième appel lance l'application et retourne une référence à la feuille de calcul représentée par le fichier spécifié, test.xls. Le fichier doit exister dans l'emplacement spécifié; sinon, Visual Basic lève une FileNotFoundException. L'exemple de code rend ensuite Excel et la fenêtre contenant la feuille de calcul spécifiée visibles.

Cet exemple requiert Option Strict Off parce qu'il utilise la liaison tardive, où les objets sont assignés aux variables de type Object. Vous pouvez spécifier Option Strict On et déclarer des objets de types d'objets spécifiques si vous ajoutez une référence à la bibliothèque de types Excel à partir de l'onglet COM de la boîte de dialogue Ajouter une référence dans le menu Projet de Visual Studio .NET.

' Add Option Strict Off to the top of your program.
Option Strict Off
' Declare necessary API routines.
Declare Function findWindow Lib "user32.dll" Alias _
    "FindWindowA" (ByVal lpClassName As String, _
    ByVal lpWindowName As Long) As Long
Declare Function sendMessage Lib "user32.dll" Alias _
    "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
Sub getExcel()
    Dim excelObj As Object
    Dim excelWasNotRunning As Boolean
    ' Test to see if a copy of Excel is already running.
    On Error Resume Next
    ' GetObject called without the first argument returns a
    ' reference to an instance of the application. If the
    ' application is not already running, an error occurs.
    excelObj = GetObject(, "Excel.Application")
    If Err().Number <> 0 Then excelWasNotRunning = True
    Err().Clear()
    ' If Excel is running, enter it into the Running Object table.
    detectExcel()
    ' Set the object variable to refer to the file you want to use.
    excelObj = GetObject("c:\vb\test.xls")
    ' Show Excel through its Application property. Then show the
    ' window containing the file, using the Windows collection of
    ' the excelObj object reference.
    excelObj.Application.Visible = True
    excelObj.Parent.Windows(1).Visible = True
    ' Insert code to manipulate the test.xls file here.
End Sub
Sub detectExcel()
    ' Procedure detects a running Excel and registers it.
    Const WM_USER As Long = 1024
    Dim hWnd As Long
    ' If Excel is running, this API call returns its handle.
    hWnd = findWindow("XLMAIN", 0)
    If hWnd = 0 Then
        ' 0 means Excel is not running.
        Exit Sub
    Else
        ' Excel is running, so use the sendMessage API function
        ' to enter it in the Running Object table.
        sendMessage(hWnd, WM_USER + 18, 0, 0)
    End If
End Sub

Lorsque vous appelez la fonction getExcel, un contrôle est effectué pour déterminer si Excel est déjà en exécution. Dans le cas contraire, une instance est créée.

Remarque de sécuritéRemarque de sécurité

Pour la simplicité, l'exemple précédent suppose que toute fenêtre nommée XLMAIN appartient à une instance de Microsoft Excel. Si un autre objet, peut-être lancé par falsification illicite, a créé une fenêtre avec ce nom, il recevrait tous les messages destinés à Excel. Dans une application devant être utilisée en production, vous devez inclure des tests plus rigoureux pour vérifier que XLMAIN appartient vraiment à Excel.

Plates-formes

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

Informations de version

.NET Framework

Prise en charge dans : 2.0, 1.1, 1.0

Voir aussi

Référence

Interaction, classe
Membres Interaction
Microsoft.VisualBasic, espace de noms
Exception
FileNotFoundException

Autres ressources

GetObject, fonction (Visual Basic)
CreateObject, fonction (Visual Basic)
Declare, instruction
Option Strict, instruction