Marshal.GetActiveObject(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.
Obtém uma instância em execução do objeto especificado a partir da tabela de objetos em execução (ROT).
public:
static System::Object ^ GetActiveObject(System::String ^ progID);
public static object GetActiveObject(string progID);
[System.Security.SecurityCritical]
public static object GetActiveObject(string progID);
static member GetActiveObject : string -> obj
[<System.Security.SecurityCritical>]
static member GetActiveObject : string -> obj
Public Shared Function GetActiveObject (progID As String) As Object
Parâmetros
- progID
- String
O identificador programático (ProgID) do objeto solicitado.
Devoluções
O objeto que foi pedido; caso contrário null. Podes transmitir este objeto para qualquer interface COM que ele suporte.
- Atributos
Exceções
O objeto não foi encontrado.
Exemplos
O exemplo seguinte foi executado num computador configurado com uma instância em execução do Microsoft Word. Não houve sequências do Microsoft Excel a correr.
O exemplo chama GetActiveObject duas vezes. A primeira chamada tenta recuperar uma referência a uma instância de Microsoft Word (uma instância do objeto Word.Application). A segunda chamada tenta recuperar uma referência a uma instância de Microsoft Excel (uma instância de um objeto Excel.Application).
O código recupera com sucesso uma referência a uma instância do Microsoft Word. No entanto, como Microsoft Excel não está a correr, a tentativa de recuperar o segundo objeto gera um COMException.
using System;
using System.Runtime.InteropServices;
class MainFunction
{
static void Main()
{
Console.WriteLine("\nSample: C# System.Runtime.InteropServices.Marshal.GetActiveObject.cs\n");
GetObj(1, "Word.Application");
GetObj(2, "Excel.Application");
}
static void GetObj(int i, String progID)
{
Object obj = null;
Console.WriteLine("\n" +i+") Object obj = GetActiveObject(\"" + progID + "\")");
try
{ obj = Marshal.GetActiveObject(progID); }
catch (Exception e)
{
Write2Console("\n Failure: obj did not get initialized\n" +
" Exception = " +e.ToString().Substring(0,43), 0);
}
if (obj != null)
{ Write2Console("\n Success: obj = " + obj.ToString(), 1 ); }
}
static void Write2Console(String s, int color)
{
Console.ForegroundColor = color == 1? ConsoleColor.Green : ConsoleColor.Red;
Console.WriteLine(s);
Console.ForegroundColor = ConsoleColor.Gray;
}
}
/*
Expected Output:
Sample: C# System.Runtime.InteropServices.Marshal.GetActiveObject.cs
1) Object obj = GetActiveObject("Word.Application")
Success: obj = System.__ComObject
2) Object obj = GetActiveObject("Excel.Application")
Failure: obj did not get initialized
Exception = System.Runtime.InteropServices.COMException
*/
Imports System.Runtime.InteropServices
Module Module1
Sub Main()
Console.WriteLine(vbcrlf + "Sample: VB System.Runtime.InteropServices.Marshal.GetActiveObject.vb" + vbcrlf)
GetObj(1, "Word.Application")
GetObj(2, "Excel.Application")
End Sub
Sub GetObj(ByVal i As Integer, ByVal progID As [String])
Dim obj As [Object] = Nothing
Console.WriteLine((vbLf & i & ") Object obj = GetActiveObject(""") + progID & """)")
Try
obj = Marshal.GetActiveObject(progID)
Catch e As Exception
Write2Console((vbLf & " Failure: obj did not get initialized" & vbLf & " Exception = ") + e.ToString().Substring(0, 43), 0)
End Try
If obj IsNot Nothing Then
Write2Console(vbLf & " Success: obj = " & obj.ToString(), 1)
End If
End Sub
Sub Write2Console(ByVal s As [String], ByVal color As Integer)
Console.ForegroundColor = If(color = 1, ConsoleColor.Green, ConsoleColor.Red)
Console.WriteLine(s)
Console.ForegroundColor = ConsoleColor.Gray
End Sub
End Module
'Expected Output:
'
'Sample: VB System.Runtime.InteropServices.Marshal.GetActiveObject.vb
'
'1) Object obj = GetActiveObject("Word.Application")
'
' Success: obj = System.__ComObject
'
'2) Object obj = GetActiveObject("Excel.Application")
'
' Failure: obj did not get initialized
' Exception = System.Runtime.InteropServices.COMException
'
Observações
GetActiveObject expõe a função COM GetActiveObject de OLEAUT32.DLL; no entanto, este último espera um identificador de classe (CLSID) em vez do identificador programático (ProgID) esperado por este método. Para obter uma instância em execução de um objeto COM sem ter sido registado ProgID, use invocação de plataforma para definir a função COM GetActiveObject. Para obter uma descrição da invocação de plataforma, consulte Consumindo funções DLL não gerenciadas.
ProgID e CLSID
As chaves na subárvore HKEY_CLASSES_ROOT do Registro contêm uma variedade de tipos de subchave. A maioria das subchaves são ProgIDs, que mapeiam uma cadeia de caracteres legível a um CLSID. Os aplicativos geralmente usam essas cadeias de caracteres legíveis por humanos em vez dos CLSIDs numéricos. Muitas vezes, um componente tem um ProgID independente de versão que é mapeado para a versão mais recente do componente que está instalado no sistema.
Aplicações e componentes usam principalmente ProgIDs para recuperar os seus CLSIDs correspondentes.