Marshal.GetActiveObject(String) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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.