Marshal.GetActiveObject(String) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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.