Interaction.GetObject(String, String) Método

Definición

Devuelve una referencia a un objeto proporcionado por un componente COM.

[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static object? GetObject (string? PathName = default, string? Class = default);
public static object GetObject (string PathName = default, string Class = default);
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetObject : string * string -> obj
static member GetObject : string * string -> obj
Public Function GetObject (Optional PathName As String = Nothing, Optional Class As String = Nothing) As Object

Parámetros

PathName
String

Opcional. String. Ruta de acceso completa y nombre del archivo que contiene el objeto que se va a recuperar. Si se omite PathName, se requiere Class.

Class
String

Es necesario si no se proporciona PathName. String. Una cadena que representa la clase del objeto. El argumento Class tiene la sintaxis y las partes siguientes:

appname.objecttype

[1|1] Parámetro

[1|2] Descripción

[2|1] appname

[2|2] Requerido. String. Nombre de la aplicación que proporciona el objeto.

[3|1] objecttype

[3|2] Requerido. String. Tipo o clase del objeto que se va a crear.

Devoluciones

Referencia a un objeto proporcionado por un componente COM.

Atributos

Excepciones

No existe ningún objeto del tipo de clase especificado.

No existe ningún objeto con la ruta de acceso y el nombre de archivo especificados.

Ejemplos

En el ejemplo siguiente se usa la GetObject función para obtener una referencia a una hoja de cálculo específica de Microsoft Excel (excelObj). Usa la propiedad de la hoja de Application cálculo para hacer que Excel sea visible, cerrarlo y realizar otras acciones. Con dos llamadas API, el detectExcel procedimiento busca Excel y, si se está ejecutando, lo escribe en la tabla Objeto en ejecución. La primera llamada a GetObject produce un error si Excel aún no se está ejecutando, lo que en este ejemplo hace que la excelWasNotRunning marca se establezca Trueen . La segunda llamada a GetObject especifica un archivo que se va a abrir. Si Excel aún no se está ejecutando, la segunda llamada la inicia y devuelve una referencia a la hoja de cálculo representada por el archivo especificado, test.xls. El archivo debe existir en la ubicación especificada; De lo contrario, Visual Basic produce una FileNotFoundExceptionexcepción . A continuación, el código de ejemplo hace que Excel y la ventana que contiene la hoja de cálculo especificada sean visibles.

En este ejemplo se requiere Option Strict Off porque usa el enlace en tiempo de compilación, donde los objetos se asignan a variables de tipo Object. Puede especificar Option Strict On y declarar objetos de tipos de objetos específicos si agrega una referencia a la biblioteca de tipos de Excel desde la pestaña COM del cuadro de diálogo Agregar referencia del menú Proyecto en Visual Studio.

' Add Option Strict Off to the top of your program.
Option Strict Off
' Test to see if a copy of Excel is already running.
Private Sub testExcelRunning()
    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.
    Dim excelObj As Object = GetObject(, "Excel.Application")
    If Err.Number = 0 Then
        MsgBox("Excel is running")
    Else
        MsgBox("Excel is not running")
    End If
    Err.Clear()
    excelObj = Nothing
End Sub
Private Sub getExcel()
    Dim fileName As String = "c:\vb\test.xls"

    If Not My.Computer.FileSystem.FileExists(fileName) Then
        MsgBox(fileName & " does not exist")
        Exit Sub
    End If

    ' Set the object variable to refer to the file you want to use.
    Dim excelObj As Object = GetObject(fileName)
    ' Show Excel through its Application property. 
    excelObj.Application.Visible = True
    ' Show the window containing the file.
    Dim winCount As Integer = excelObj.Parent.Windows.Count()
    excelObj.Parent.Windows(winCount).Visible = True

    ' Insert additional code to manipulate the test.xls file here.
    ' ...

    excelObj = Nothing
End Sub

Cuando se llama a la getExcel función, se realiza una comprobación para ver si Excel ya se está ejecutando. Si no es así, se crea una instancia.

Importante

Por motivos de simplicidad, en el ejemplo anterior se supone que cualquier ventana llamada XLMAIN pertenece a una instancia de Microsoft Excel. Si otro objeto, posiblemente iniciado por manipulación ilícita, creó una ventana con ese nombre, recibiría todos los mensajes que tenía previsto para Excel. En una aplicación que se va a usar para producción, debe incluir algunas pruebas más rigurosas para comprobar que XLMAIN realmente pertenece a Excel.

Comentarios

Use la GetObject función para cargar una instancia de un componente COM desde un archivo. Esto se ilustra en el siguiente ejemplo:

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

Cuando se ejecuta este código, se inicia la aplicación asociada al especificado PathName y se activa el objeto del archivo especificado.

Casos predeterminados

Si PathName es una cadena de longitud cero (""), GetObject devuelve una nueva instancia de objeto del tipo de clase especificado. Si se omite el PathName argumento , GetObject devuelve un objeto activo actualmente del tipo de clase especificado en Class. Si no existe ningún objeto del tipo especificado, se produce un error.

Acceso a un subobjeto

Algunas aplicaciones permiten activar un subobjeto asociado a un archivo. Para ello, agregue un signo de exclamación (!) al final del nombre de archivo y sigalo con una cadena que identifique la parte del archivo que desea activar. Para obtener información sobre cómo crear esta cadena, consulte la documentación de la aplicación que creó el objeto .

Por ejemplo, en una aplicación de dibujo podría tener varias capas en un dibujo almacenado en un archivo. Puede usar el código siguiente para activar una capa dentro de un dibujo denominado schema.cad.

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

Especificar una clase

Si no especifica el objeto Class, Automation determina la aplicación que se va a iniciar y el objeto que se va a activar, en función del nombre de archivo que proporcione. Sin embargo, algunos archivos pueden admitir más de una clase de objeto. Por ejemplo, un dibujo podría admitir tres tipos diferentes de objetos: un Application objeto, un Drawing objeto y un Toolbar objeto, todos los cuales forman parte del mismo archivo. Para especificar qué objeto de un archivo desea activar, use el argumento opcional Class . Esto se ilustra en el siguiente ejemplo:

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

En el ejemplo anterior, Figment es el nombre de una aplicación de dibujo y Drawing es uno de los tipos de objeto que admite.

Uso del objeto

Una vez activado un objeto, se hace referencia a él en el código mediante la variable de objeto que declaró. En el ejemplo anterior, se obtiene acceso a las propiedades y los métodos del nuevo objeto mediante la variable drawObjde objeto . Esto se ilustra en el siguiente ejemplo:

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

Nota

Use la GetObject función cuando haya una instancia actual del objeto o si desea crear el objeto con un archivo cargado. Si no hay ninguna instancia actual y no desea que el objeto se inicie con un archivo cargado, use la CreateObject función .

Si un objeto se ha registrado como un objeto de instancia única de ActiveX, solo se crea una instancia del objeto, independientemente de cuántas veces CreateObject se llame. Con un objeto de instancia única, GetObject siempre devuelve la misma instancia cuando se llama con la sintaxis de cadena de longitud cero ("") y produce un error si se omite el PathName argumento. No se puede usar GetObject para obtener una referencia a una clase creada con Visual Basic.

Importante

La GetObject función requiere permiso de código no administrado, lo que podría afectar a su ejecución en situaciones de confianza parcial. Para obtener más información, vea SecurityPermission y Permisos de acceso del código.

Se aplica a

Consulte también