Método Marshal.GetActiveObject (String)
Dica
The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.
Obtém uma instância em execução do objeto especificado do ROT (tabela de objetos em execução).
Namespace: System.Runtime.InteropServices
Assembly: mscorlib (em mscorlib.dll)
Sintaxe
[SecurityCriticalAttribute]
public static object GetActiveObject(
string progID
)
public:
[SecurityCriticalAttribute]
static Object^ GetActiveObject(
String^ progID
)
[<SecurityCriticalAttribute>]
static member GetActiveObject :
progID:string -> Object
<SecurityCriticalAttribute>
Public Shared Function GetActiveObject (
progID As String
) As Object
Parâmetros
progID
Type: System.StringO ProgID (identificador programático) do objeto solicitado.
Valor Retornado
Type: System.Object
O objeto que foi solicitado; caso contrário, null. Você pode converter esse objeto em qualquer interface COM à qual ele dê suporte.
Exceções
Exception | Condition |
---|---|
COMException | O objeto não foi encontrado. |
Comentários
GetActiveObjectexpõe o COM GetActiveObject função OLEAUT32. DLL; No entanto, o último esperava um identificador de classe (CLSID) em vez do identificador programático (ProgID) esperados por este método. Para obter uma instância em execução de um objeto COM sem um registrado ProgID, usar invocação de plataforma para definir o COM GetActiveObject função. Para obter uma descrição da plataforma invoke, consulte Consumindo funções de 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 amigável para um CLSID. Aplicativos geralmente usam essas cadeias de caracteres legível em vez dos CLSIDs numéricos. Geralmente, um componente tem uma versão de ProgID que é mapeado para a versão mais recente do componente que é instalado no sistema.
Aplicativos e componentes principalmente usam ProgIDs para recuperar seus CLSIDs correspondentes.
Exemplos
O exemplo a seguir foi executado em um computador que foi configurado com uma instância em execução do Microsoft Word. Não havia nenhuma instância do Microsoft Excel em execução.
O exemplo chama GetActiveObject duas vezes. A primeira chamada tenta recuperar uma referência a uma instância do Microsoft Word (uma instância do Word.Application objeto). A segunda chamada tenta recuperar uma referência a uma instância do Microsoft Excel (uma instância de um Excel.Application objeto).
O código recupera uma referência a uma instância do Microsoft Word com êxito. No entanto, como o 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
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
'
Segurança
requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.
Informações de Versão
.NET Framework
Disponível desde 1.1
Confira Também
Classe Marshal
Namespace System.Runtime.InteropServices
Retornar ao início