Marshal.GetActiveObject(String) Método

Definição

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.

Aplica-se a