Marshal.GetActiveObject(String) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém uma instância em execução do objeto especificado da ROT (tabela de objetos em execução).
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 ProgID (identificador programático) do objeto que foi solicitado.
Retornos
O objeto que foi solicitado; caso contrário null. Você pode converter esse objeto em qualquer interface COM compatível.
- Atributos
Exceções
O objeto não foi encontrado.
Exemplos
O exemplo a seguir foi executado em um computador que foi configurado com uma instância em execução de Microsoft Word. Não havia instâncias de Microsoft Excel em execução.
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 uma referência a uma instância de Microsoft Word com êxito. No entanto, como Microsoft Excel não está em execução, 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
'
Comentários
GetActiveObject expõe a função COM GetActiveObject de OLEAUT32.DLL; no entanto, este último espera um CLSID (identificador de classe) em vez do identificador programático (ProgID) esperado por esse método. Para obter uma instância em execução de um objeto COM sem um registro ProgID, use a invocação de plataforma para definir a função COM GetActiveObject . Para obter uma descrição da invocação de plataforma, consulte Consuming Unmanaged DLL Functions.
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 fácil de usar para um CLSID. Os aplicativos geralmente usam essas cadeias de caracteres legíveis por humanos em vez dos CLSIDs numéricos. Geralmente, um componente tem um ProgID independente de versão mapeado para a versão mais recente do componente instalado no sistema.
Os aplicativos e componentes usam principalmente ProgIDs para recuperar seus CLSIDs correspondentes.