Interaction.GetObject(String, String) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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 True
en . 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 drawObj
de 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.