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.StringDer 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
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