Marshal.GetActiveObject(String) Méthode

Définition

Obtient une instance en cours d’exécution de l’objet spécifié à partir de la table d’objets en cours d’exécution (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

Paramètres

progID
String

Identificateur programmatique (ProgID) de l’objet demandé.

Retours

Objet demandé ; sinon null. Vous pouvez convertir cet objet en n’importe quelle interface COM prise en charge.

Attributs

Exceptions

L’objet est introuvable.

Exemples

L’exemple suivant a été exécuté sur un ordinateur configuré avec une instance en cours d’exécution de Microsoft Word. Il n’y a pas eu d’instances de Microsoft Excel en cours d’exécution.

L’exemple appelle GetActiveObject deux fois. Le premier appel tente de récupérer une référence à une instance de Microsoft Word (instance de l’objet Word.Application). Le deuxième appel tente de récupérer une référence à une instance de Microsoft Excel (instance d’un objet Excel.Application).

Le code récupère une référence à une instance de Microsoft Word avec succès. Toutefois, étant donné que Microsoft Excel n’est pas en cours d’exécution, la tentative de récupération du deuxième objet déclenche une 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
'

Remarques

GetActiveObject expose la fonction COM GetActiveObject de OLEAUT32.DLL ; Toutefois, cette dernière attend un identificateur de classe (CLSID) au lieu de l’identificateur programmatique (ProgID) attendu par cette méthode. Pour obtenir une instance en cours d’exécution d’un objet COM sans objet COM enregistré ProgID, utilisez l'invocation de la plateforme pour définir la fonction COM GetActiveObject. Pour obtenir une description de l’appel de plateforme, consultez Consommation de fonctions DLL non managées.

ProgID et CLSID

Les clés de la sous-arborescence HKEY_CLASSES_ROOT du Registre contiennent divers types de sous-clés. La plupart des sous-clés sont des ProgIDs, qui associent une chaîne conviviale à un CLSID. Les applications utilisent souvent ces chaînes lisibles par l’homme au lieu des CLSID numériques. Souvent, un composant possède un ProgID indépendant de la version qui est mappé à la version la plus récente du composant installée sur le système.

Les applications et les composants utilisent principalement des ProgID pour récupérer leurs CLSID correspondants.

S’applique à