Interaction.GetObject(String, String) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Devolve uma referência a um objeto fornecida por um 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. O caminho completo e o nome do ficheiro que contém o objeto a obter. Se PathName for omitido, Class é obrigatório.
- Class
- String
É obrigatório se PathName não for fornecido.
String. Uma cadeia que representa a classe do objeto. O Class argumento tem a seguinte sintaxe e partes:
appname.objecttype
[1|1] Parâmetro
[1|2] Descrição
[2|1] appname
[2|2] Obrigatório.
String. O nome da aplicação que fornece o objeto.
[3|1] objecttype
[3|2] Obrigatório.
String. O tipo ou classe de objeto a criar.
Devoluções
Uma referência a um objeto fornecida por um componente COM.
Exceções
Não existe nenhum objeto do tipo de classe especificado.
Não existe nenhum objeto com o caminho e nome de ficheiro especificados.
Exemplos
O exemplo seguinte utiliza a função GetObject para obter uma referência a uma folha de cálculo específica de Microsoft Excel (excelObj). Utiliza a propriedade Application da folha de cálculo para tornar Excel visível, para a fechar e para realizar outras ações. Usando duas chamadas de API, o procedimento detectExcel procura Excel e, se estiver a correr, insere-o na tabela de Objetos em Execução. A primeira chamada para GetObject causa um erro se Excel ainda não estiver a correr, o que neste exemplo faz com que a flag excelWasNotRunning seja definida para True. A segunda chamada especifica GetObject um ficheiro a abrir. Se Excel ainda não estiver a correr, a segunda chamada inicia-a e devolve uma referência à folha de cálculo representada pelo ficheiro especificado, test.xls. O ficheiro deve existir na localização especificada; caso contrário, Visual Basic lança um FileNotFoundException. Em seguida, o código de exemplo torna o Excel e a janela que contém a folha de cálculo especificada visível.
Este exemplo requer, Option Strict Off porque utiliza ligação tardia, onde objetos são atribuídos a variáveis do tipo Object. Pode especificar Option Strict On e declarar objetos de tipos específicos se adicionar uma referência à biblioteca de tipos Excel a partir do separador COM da caixa de diálogo Add Reference do menu Project no 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
Quando chama a função getExcel, é feita uma verificação para ver se Excel já está a correr. Se não for, então uma instância é criada.
Importante
Para simplificar, o exemplo anterior assume que qualquer janela chamada XLMAIN pertence a uma instância de Microsoft Excel. Se outro objeto, possivelmente lançado por adulteração ilícita, criasse uma janela com esse nome, receberia todas as mensagens que pretendia para o Excel. Numa aplicação para produção, deve incluir alguns testes mais rigorosos para verificar se XLMAIN pertence realmente a Excel.
Observações
Use a GetObject função para carregar uma instância de um componente COM a partir de um ficheiro. O seguinte exemplo ilustra precisamente isto.
Dim CADObject As Object
CADObject = GetObject("C:\CAD\schema.cad")
Quando este código é executado, a aplicação associada ao especificado PathName é iniciada e o objeto no ficheiro especificado é ativado.
Casos de Inexistência
Se PathName for uma cadeia de comprimento zero (""), GetObject devolve uma nova instância de objeto do tipo de classe especificado. Se o PathName argumento for omitido, GetObject devolve um objeto atualmente ativo do tipo de classe especificado em Class. Se não existir nenhum objeto do tipo especificado, ocorrerá um erro.
Aceder a um Subobjeto
Algumas aplicações permitem ativar um subobjeto associado a um ficheiro. Para isso, adiciona um ponto de exclamação (!) ao final do nome do ficheiro e segue-o com uma cadeia que identifica a parte do ficheiro que queres ativar. Para obter informações sobre como criar esta cadeia, veja a documentação da aplicação que criou o objeto.
Por exemplo, numa aplicação de desenho, pode ter várias camadas num desenho armazenado num ficheiro. Pode usar o seguinte código para ativar uma camada dentro de um desenho chamada schema.cad.
layerObject = GetObject("C:\CAD\schema.cad!Layer3")
Especificação de uma Classe
Se não especificar o Classobjeto , a Automação determina a aplicação a iniciar e o objeto a ativar, com base no nome do ficheiro que fornecer. Alguns ficheiros, no entanto, podem suportar mais do que uma classe de objetos. Por exemplo, um desenho pode suportar três tipos diferentes de objetos: um Application objeto, um Drawing objeto e um Toolbar objeto, todos eles parte do mesmo ficheiro. Para especificar qual objeto num ficheiro queres ativar, usa o argumento opcional Class . O seguinte exemplo ilustra precisamente isto.
Dim drawObj As Object
drawObj = GetObject("C:\Drawings\sample.drw", "Figment.Drawing")
No exemplo anterior, Figment é o nome de uma aplicação de desenho e Drawing é um dos tipos de objetos que suporta.
Usar o Objeto
Quando um objeto é ativado, refere-se a ele em código usando a variável objeto que declarou. No exemplo anterior, acede às propriedades e métodos do novo objeto usando a variável drawObjobjeto . O seguinte exemplo ilustra precisamente isto.
drawObj.Line(9, 90)
drawObj.InsertText(9, 100, "Hello, world.")
drawObj.SaveAs("C:\Drawings\sample.drw")
Note
Use a GetObject função quando houver uma instância atual do objeto ou se quiser criar o objeto com um ficheiro carregado. Se não houver uma instância atual e não quiser que o objeto seja iniciado com um ficheiro carregado, use a CreateObject função.
Se um objeto se registou como um objeto ActiveX de instância única, apenas uma instância do objeto é criada, independentemente de quantas CreateObject vezes seja chamada. Com um objeto de instância única, GetObject devolve sempre a mesma instância quando chamada com a sintaxe de string de comprimento zero (""), e causa um erro se o PathName argumento for omitido. Não pode usar GetObject para obter uma referência a uma classe criada com Visual Basic.
Importante
A GetObject função requer permissão de código não gerida, o que pode afetar a sua execução em situações de confiança parcial. Para mais informações, consulte SecurityPermission e Permissões de Acesso ao Código.