Marshal.GetActiveObject(String) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene una instancia en ejecución del objeto especificado de la tabla de objetos en ejecución (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
Identificador de programación (ProgID) del objeto que se solicitó.
Devoluciones
Objeto solicitado; de lo contrario null, es . Puede convertir este objeto en cualquier interfaz COM que admita.
- Atributos
Excepciones
No se ha encontrado el objeto.
Ejemplos
El ejemplo siguiente se ejecutó en un equipo que se configuró con una instancia en ejecución de Microsoft Word. No había instancias de Microsoft Excel en ejecución.
En el ejemplo se llama GetActiveObject dos veces. La primera llamada intenta recuperar una referencia a una instancia de Microsoft Word (una instancia del objeto Word.Application). La segunda llamada intenta recuperar una referencia a una instancia de Microsoft Excel (una instancia de un objeto Excel.Application).
El código recupera una referencia a una instancia de Microsoft Word correctamente. Sin embargo, dado que Microsoft Excel no se está ejecutando, el intento de recuperar el segundo objeto genera un 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
'
Comentarios
GetActiveObject expone la función COM GetActiveObject de OLEAUT32.DLL; sin embargo, este último espera un identificador de clase (CLSID) en lugar del identificador de programación (ProgID) esperado por este método. Para obtener una instancia en ejecución de un objeto COM sin un ProgID registrado, use la invocación de plataforma para definir la función COM GetActiveObject. Para obtener una descripción de la invocación de plataforma, consulte Consumo de funciones DLL no administradas.
ProgID y CLSID
Las claves del subárbol HKEY_CLASSES_ROOT del Registro contienen una variedad de tipos de subclave. La mayoría de las subclaves son ProgIDs, que asignan una cadena amigable para el usuario a un CLSID. Las aplicaciones suelen usar estas cadenas legibles en lugar de los CLSID numéricos. A menudo, un componente tiene un ProgID independiente de la versión que se asigna a la versión más reciente del componente instalado en el sistema.
Las aplicaciones y los componentes usan principalmente ProgID para recuperar sus CLSID correspondientes.