Marshal.GetActiveObject(String) Methode

Definitie

Hiermee haalt u een actief exemplaar van het opgegeven object op uit de actieve objecttabel (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

Parameters

progID
String

De programmatische id (ProgID) van het object dat is aangevraagd.

Retouren

Het object dat is aangevraagd; anders null. U kunt dit object casten naar elke COM-interface die het ondersteunt.

Kenmerken

Uitzonderingen

Het object is niet gevonden.

Voorbeelden

Het volgende voorbeeld is uitgevoerd op een computer die is geconfigureerd met een actief exemplaar van Microsoft Word. Er zijn geen exemplaren van Microsoft Excel uitgevoerd.

Het voorbeeld roept GetActiveObject twee keer aan. De eerste aanroep probeert een verwijzing op te halen naar een exemplaar van Microsoft Word (een exemplaar van het Word.Application-object). De tweede aanroep probeert een verwijzing op te halen naar een exemplaar van Microsoft Excel (een exemplaar van een Excel.Application-object).

Met de code wordt een verwijzing naar een exemplaar van Microsoft Word opgehaald. Omdat Microsoft Excel echter niet wordt uitgevoerd, genereert de poging om het tweede object op te halen een 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
'

Opmerkingen

GetActiveObject maakt de functie COM GetActiveObject beschikbaar vanuit OLEAUT32.DLL; De laatste verwacht echter een klasse-id (CLSID) in plaats van de programmatische id (ProgID) die door deze methode wordt verwacht. Als u een actief exemplaar van een COM-object wilt verkrijgen zonder een geregistreerd ProgID, gebruikt u platform aanroepen om de functie COM GetActiveObject te definiëren. Voor een beschrijving van het aanroepen van het platform, zie Onbeheerde DLL-functies consumeren.

ProgID en CLSID

Sleutels in de HKEY_CLASSES_ROOT substructuur van het register bevatten verschillende typen subsleutels. De meeste subsleutels zijn ProgID's, die een gebruiksvriendelijke tekenreeks toewijzen aan een CLSID. Toepassingen gebruiken vaak deze door mensen leesbare tekenreeksen in plaats van de numerieke CLSID's. Vaak heeft een onderdeel een versie-onafhankelijke ProgID die is toegewezen aan de nieuwste versie van het onderdeel dat op het systeem is geïnstalleerd.

Toepassingen en onderdelen maken voornamelijk gebruik van ProgID's om hun bijbehorende CLSID's op te halen.

Van toepassing op