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.
public static object GetObject(string PathName = default, string Class = default);
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
Optional.
String. La ruta de acceso completa y el nombre del archivo que contiene el objeto que se va a recuperar. Si PathName se omite, Class es necesario.
- Class
- String
Obligatorio si PathName no se proporciona.
String. Una cadena que representa la clase del objeto. El Class argumento tiene la sintaxis y las partes siguientes:
appname.objecttype
[1|1] Parámetro
[1|2] Descripción
[2|1] appname
[2|2] Obligatorio.
String. El nombre de la aplicación que proporciona el objeto.
[3|1] objecttype
[3|2] Obligatorio.
String. El tipo o la clase de objeto que se va a crear.
Devoluciones
Referencia a un objeto proporcionado por un componente COM.
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 función GetObject para obtener una referencia a una hoja de cálculo de Microsoft Excel específica (excelObj). Usa la propiedad Application de la hoja de cálculo para que Excel sea visible, cerrarla y realizar otras acciones. Con dos llamadas API, el procedimiento detectExcel busca Excel y, si se está ejecutando, escríbalo 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 marca excelWasNotRunning se establezca en True. 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 FileNotFoundException. A continuación, el código de ejemplo hace visibles tanto Excel como la ventana que contiene la hoja de cálculo especificada.
En este ejemplo se requiere Option Strict Off porque usa el enlace en tiempo de demora, donde los objetos se asignan a variables de tipo Object. Puede especificar
' 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 función getExcel, 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 denominada XLMAIN pertenece a una instancia de Microsoft Excel. Si otro objeto, posiblemente iniciado por alteraciones ilícitas, creó una ventana con ese nombre, recibiría todos los mensajes que pretendía 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. En el siguiente ejemplo se ilustra esto.
Dim CADObject As Object
CADObject = GetObject("C:\CAD\schema.cad")
Cuando se ejecuta este código, se inicia la aplicación asociada con el 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 puede 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")
Especificación de 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 . En el siguiente ejemplo se ilustra esto.
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 métodos del nuevo objeto mediante la variable drawObjde objeto . En el siguiente ejemplo se ilustra esto.
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 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, que podría afectar a su ejecución en situaciones de confianza parcial. Para obtener más información, consulte SecurityPermission y Permisos de acceso de código.