Freigeben über


Marshal.GetActiveObject-Methode: (String)

 

Veröffentlicht: Oktober 2016

Ruft eine ausgeführte Instanz des angegebenen Objekts aus der ROT (Running Object Table) ab.

Namespace:   System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)

Syntax

[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

Parameter

  • progID
    Type: System.String

    Der programmgesteuerte Bezeichner (ProgID) des Objekts, das angefordert wurde.

Rückgabewert

Type: System.Object

Das Objekt, das angefordert wurde, andernfalls null. Sie können dieses Objekt in eine beliebige unterstützte COM-Schnittstelle umwandeln.

Ausnahmen

Exception Condition
COMException

Das Objekt wurde nicht gefunden.

Hinweise

GetActiveObject macht COM GetActiveObject Funktion aus OLEAUT32. DLL; IGNORIERT Letztere erwartet jedoch eine Klassen-ID (CLSID) anstelle der programmgesteuerte Bezeichner (ProgID) von dieser Methode erwartet. Zum Abrufen einer ausgeführten Instanz eines COM-Objekts ohne registrierte ProgID, verwenden eines Plattformaufrufs zum Definieren der COM GetActiveObject Funktion. Eine Beschreibung der Plattform aufrufen, finden Sie unter Consuming Unmanaged DLL Functions.

ProgID und CLSID

Schlüssel in der Teilstruktur HKEY_CLASSES_ROOT der Registrierung enthalten verschiedene Typen von Unterschlüsseln. Die meisten Unterschlüssel sind ProgIDs, die CLSID eine benutzerfreundliche Zeichenfolge zuordnen. Anwendungen verwenden häufig diese lesbare Zeichenfolgen anstelle von numerischen CLSIDs. Eine Komponente hat häufig eine versionsunabhängige ProgID, die die neueste Version der Komponente zugeordnet ist, die auf dem System installiert ist.

Anwendungen und Komponenten verwenden in erster Linie ProgIDs, um ihre entsprechenden CLSIDs abzurufen.

Beispiele

Im folgende Beispiel wurde auf einem Computer ausführen, der mit einer ausgeführten Instanz von Microsoft Word konfiguriert wurde. Es wurden keine Instanzen von Microsoft Excel ausgeführt.

Das Beispiel ruft GetActiveObject zweimal. Der erste Aufruf versucht, einen Verweis auf eine Instanz von Microsoft Word abrufen (eine Instanz der Word.Application Objekt). Der zweite Aufruf versucht, einen Verweis auf eine Instanz von Microsoft Excel abrufen (eine Instanz einer Excel.Application Objekt).

Der Code Ruft einen Verweis auf eine Instanz von Microsoft Word erfolgreich ab. Da jedoch Microsoft Excel nicht ausgeführt wird, das zweite Objekt abrufen löst eine 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
'

Sicherheit

SecurityCriticalAttribute

requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

Versionsinformationen

.NET Framework
Verfügbar seit 1.1

Siehe auch

Marshal-Klasse
System.Runtime.InteropServices-Namespace

Zurück zum Anfang