Type.GetTypeFromCLSID Methode

Definition

Ruft den Typ ab, dem die angegebene Klassen-ID (CLSID) zugeordnet ist.

Überlädt

GetTypeFromCLSID(Guid, String, Boolean)

Ruft den Typ, dem die angegebene Klassen-ID (CLSID) zugeordnet ist, vom angegebenen Server ab. Dabei wird angegeben, ob bei Auftreten eines Fehlers beim Laden des Typs eine Ausnahme ausgelöst werden soll.

GetTypeFromCLSID(Guid, String)

Ruft den Typ, dem die angegebene Klassen-ID (CLSID) zugeordnet ist, vom angegebenen Server ab.

GetTypeFromCLSID(Guid, Boolean)

Ruft den Typ ab, dem die angegebene Klassen-ID (CLSID) zugeordnet ist. Dabei wird angegeben, ob bei Auftreten eines Fehlers beim Laden des Typs eine Ausnahme ausgelöst werden soll.

GetTypeFromCLSID(Guid)

Ruft den Typ ab, dem die angegebene Klassen-ID (CLSID) zugeordnet ist.

GetTypeFromCLSID(Guid, String, Boolean)

Ruft den Typ, dem die angegebene Klassen-ID (CLSID) zugeordnet ist, vom angegebenen Server ab. Dabei wird angegeben, ob bei Auftreten eines Fehlers beim Laden des Typs eine Ausnahme ausgelöst werden soll.

public:
 static Type ^ GetTypeFromCLSID(Guid clsid, System::String ^ server, bool throwOnError);
public static Type? GetTypeFromCLSID (Guid clsid, string? server, bool throwOnError);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid, string? server, bool throwOnError);
public static Type GetTypeFromCLSID (Guid clsid, string server, bool throwOnError);
static member GetTypeFromCLSID : Guid * string * bool -> Type
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetTypeFromCLSID : Guid * string * bool -> Type
Public Shared Function GetTypeFromCLSID (clsid As Guid, server As String, throwOnError As Boolean) As Type

Parameter

clsid
Guid

Die CLSID des abzurufenden Typs.

server
String

Der Server, von dem der Typ geladen werden soll. Wenn der Servername nullist, wird diese Methode automatisch auf den lokalen Computer zurückgesetzt.

throwOnError
Boolean

true, um mögliche Ausnahmen auszulösen.

- oder - false, um Ausnahmen zu ignorieren.

Gibt zurück

Type

System.__ComObject unabhängig von der Gültigkeit der CLSID.

Attribute

Beispiele

Im folgenden Beispiel wird die CLSID des Microsoft Word Application-Objekts verwendet, um einen COM-Typ abzurufen, der die Microsoft Word-Anwendung von einem Server namens computer17.central.contoso.com. Anschließend wird der Typ durch Aufrufen der -Methode instanziiert und durch Aufrufen der Activator.CreateInstance Application.Quit-Methode geschlossen. Eine Ausnahme wird ausgelöst, wenn beim Laden des Typs ein Fehler auftritt.

using System;
using System.Reflection;
using System.Runtime.InteropServices;

public class Example
{
   private const string WORD_CLSID = "{000209FF-0000-0000-C000-000000000046}";
   
   public static void Main()
   {
      try {
         // Start an instance of the Word application.
         var word = Type.GetTypeFromCLSID(Guid.Parse(WORD_CLSID), 
                                          "computer17.central.contoso.com",
                                          true);
         Console.WriteLine("Instantiated Type object from CLSID {0}",
                           WORD_CLSID);
         Object wordObj = Activator.CreateInstance(word);
         Console.WriteLine("Instantiated {0}", 
                           wordObj.GetType().FullName, WORD_CLSID);
            
         // Close Word.
         word.InvokeMember("Quit", BindingFlags.InvokeMethod, null, 
                           wordObj, new object[] { 0, 0, false } );
      }
      // The method can throw any of a variety of exceptions.
      catch (Exception e) {
         Console.WriteLine("{0}: Unable to instantiate an object for {1}", 
                           e.GetType().Name, WORD_CLSID);
      }      
   }
}
// The example displays the following output:
//    Instantiated Type object from CLSID {000209FF-0000-0000-C000-000000000046}
//    Instantiated Microsoft.Office.Interop.Word.ApplicationClass
Imports System.Reflection
Imports System.Runtime.InteropServices

Module Example
   Private Const WORD_CLSID As String = "{000209FF-0000-0000-C000-000000000046}"
   
   Public Sub Main()
      Try
         ' Start an instance of the Word application.
         Dim word As Type = Type.GetTypeFromCLSID(Guid.Parse(WORD_CLSID), 
                                                  "computer17.central.contoso.com",
                                                  True)
         Console.WriteLine("Instantiated Type object from CLSID {0}",
                           WORD_CLSID)

         Dim wordObj As Object = Activator.CreateInstance(word)
         Console.WriteLine("Instantiated {0}", 
                           wordObj.GetType().FullName)
         
         ' Close Word.
         word.InvokeMember("Quit", BindingFlags.InvokeMethod, Nothing, 
                           wordObj, New Object() { 0, 0, False } )
      ' The method can throw any of a variety of exceptions.
      Catch e As Exception
         Console.WriteLine("{0}: Unable to instantiate an object for {1}", 
                           e.GetType().Name, WORD_CLSID)
      End Try
   End Sub
End Module
' The example displays the following output:
'    Instantiated Type object from CLSID {000209FF-0000-0000-C000-000000000046}
'    Instantiated Microsoft.Office.Interop.Word.ApplicationClass

Hinweise

Die -Methode unterstützt spät gebundenen Zugriff auf nicht verwaltete COM-Objekte von .NET Framework-Apps, wenn Sie den Klassenbezeichner GetTypeFromCLSID (CLSID) des COM-Objekts kennen. Der Klassenbezeichner für COM-Klassen wird im HKEY_CLASSES_ROOT\CLSID der Registrierung definiert. Sie können den Wert der -Eigenschaft abrufen, um zu bestimmen, ob der von dieser Methode zurückgegebene Typ IsCOMObject ein COM-Objekt ist.

Tipp

Sie können die -Methode für den spät gebundenen Zugriff auf COM-Objekte aufrufen, GetTypeFromProgID deren programmgesteuerter Bezeichner (ProgID) Sie kennen.

Das Instanziieren eines nicht verwalteten COM-Objekts aus seiner CLSID ist ein zweistufiger Prozess:

  1. Rufen Sie ein Type -Objekt ab, das __ComObject den darstellt, der der CLSID entspricht, indem Sie die -Methode GetTypeFromCLSID aufrufen.

  2. Rufen Sie die Activator.CreateInstance(Type) -Methode auf, um das COM-Objekt zu instanziieren.

Ausnahmen wie werden ausgelöst, wenn für angegeben wird, bei nicht OutOfMemoryException true throwOnError registrierten CLSIDs wird jedoch kein Fehler ausgelöst.

Hinweise für Aufrufer

Diese Methode ist für die Verwendung mit COM-Objekten vorgesehen, nicht mit .NET Framework Objekten. Alle verwalteten Objekte, einschließlich der objekte, die für COM sichtbar sind (d. h. ihr Attribut ist ), verfügen über eine ComVisibleAttribute true GUID, die von der -Eigenschaft zurückgegeben GUID wird. Obwohl die -Methode ein -Objekt zurückgibt, das der GUID für ein bestimmtes verwaltetes Objekt entspricht, können Sie dieses Objekt nicht zum Erstellen einer Typinstanz verwenden, indem Sie die -Methode aufrufen, wie im folgenden GetTypeFromCLSID(Guid, String, Boolean) Type Beispiel Type CreateInstance(Type) gezeigt.

using System;
using System.Runtime.InteropServices;

[assembly:ComVisible(true)]

// Define two classes, and assign one an explicit GUID.
[GuidAttribute("d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4")]
public class ExplicitGuid
{ }

public class NoExplicitGuid
{ }

public class Example
{
   public static void Main()
   {
      Type explicitType = typeof(ExplicitGuid);
      Guid explicitGuid = explicitType.GUID;
      
      // Get type of ExplicitGuid from its GUID.
      Type explicitCOM = Type.GetTypeFromCLSID(explicitGuid);
      Console.WriteLine("Created {0} type from CLSID {1}",
                        explicitCOM.Name, explicitGuid);
                        
      // Compare the two type objects.
      Console.WriteLine("{0} and {1} equal: {2}",
                        explicitType.Name, explicitCOM.Name,
                        explicitType.Equals(explicitCOM));                  
      
      // Instantiate an ExplicitGuid object.
      try {
         Object obj = Activator.CreateInstance(explicitCOM);
         Console.WriteLine("Instantiated a {0} object", obj.GetType().Name);
      } 
      catch (COMException e) {
         Console.WriteLine("COM Exception:\n{0}\n", e.Message);   
      } 
        
      Type notExplicit = typeof(NoExplicitGuid);
      Guid notExplicitGuid = notExplicit.GUID;
      
      // Get type of ExplicitGuid from its GUID.
      Type notExplicitCOM = Type.GetTypeFromCLSID(notExplicitGuid);
      Console.WriteLine("Created {0} type from CLSID {1}",
                        notExplicitCOM.Name, notExplicitGuid);
                        
      // Compare the two type objects.
      Console.WriteLine("{0} and {1} equal: {2}",
                        notExplicit.Name, notExplicitCOM.Name,
                        notExplicit.Equals(notExplicitCOM));                  
      
      // Instantiate an ExplicitGuid object.
      try {
         Object obj = Activator.CreateInstance(notExplicitCOM);
         Console.WriteLine("Instantiated a {0} object", obj.GetType().Name);
      } 
      catch (COMException e) {
         Console.WriteLine("COM Exception:\n{0}\n", e.Message);   
      }   
   }
}
// The example displays the following output:
//       Created __ComObject type from CLSID d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4
//       ExplicitGuid and __ComObject equal: False
//       COM Exception:
//       Retrieving the COM class factory for component with CLSID 
//       {D055CBA3-1F83-4BD7-BA19-E22B1B8EC3C4} failed due to the following error: 
//       80040154 Class not registered 
//       (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
//       
//       Created __ComObject type from CLSID 74f03346-a718-3516-ac78-f351c7459ffb
//       NoExplicitGuid and __ComObject equal: False
//       COM Exception:
//       Retrieving the COM class factory for component with CLSID 
//       {74F03346-A718-3516-AC78-F351C7459FFB} failed due to the following error: 
//       80040154 Class not registered 
//       (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Stattdessen sollte nur verwendet werden, um die GUID eines nicht verwalteten COM-Objekts abzurufen, und das resultierende Objekt, das an die -Methode übergeben wird, muss ein nicht GetTypeFromCLSID(Guid, String, Boolean) Type CreateInstance(Type) verwaltetes COM-Objekt darstellen.

Gilt für:

GetTypeFromCLSID(Guid, String)

Ruft den Typ, dem die angegebene Klassen-ID (CLSID) zugeordnet ist, vom angegebenen Server ab.

public:
 static Type ^ GetTypeFromCLSID(Guid clsid, System::String ^ server);
public static Type? GetTypeFromCLSID (Guid clsid, string? server);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid, string? server);
public static Type GetTypeFromCLSID (Guid clsid, string server);
static member GetTypeFromCLSID : Guid * string -> Type
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetTypeFromCLSID : Guid * string -> Type
Public Shared Function GetTypeFromCLSID (clsid As Guid, server As String) As Type

Parameter

clsid
Guid

Die CLSID des abzurufenden Typs.

server
String

Der Server, von dem der Typ geladen werden soll. Wenn der Servername null ist, wird diese Methode automatisch auf den lokalen Computer zurückgesetzt.

Gibt zurück

Type

System.__ComObject unabhängig von der Gültigkeit der CLSID.

Attribute

Beispiele

Im folgenden Beispiel wird die CLSID des Microsoft Word Application-Objekts verwendet, um einen COM-Typ abzurufen, der die Microsoft Word-Anwendung von einem Server namens computer17.central.contoso.com. Anschließend wird der Typ durch Aufrufen der -Methode instanziiert und durch Aufrufen der Activator.CreateInstance Application.Quit-Methode geschlossen.

using System;
using System.Reflection;
using System.Runtime.InteropServices;

public class Example
{
   private const string WORD_CLSID = "{000209FF-0000-0000-C000-000000000046}";
   
   public static void Main()
   {
      // Start an instance of the Word application.
      var word = Type.GetTypeFromCLSID(Guid.Parse(WORD_CLSID), "computer17.central.contoso.com");
      Console.WriteLine("Instantiated Type object from CLSID {0}",
                        WORD_CLSID);
      try {
         Object wordObj = Activator.CreateInstance(word);
         Console.WriteLine("Instantiated {0}", 
                           wordObj.GetType().FullName, WORD_CLSID);
            
         // Close Word.
         word.InvokeMember("Quit", BindingFlags.InvokeMethod, null, 
                           wordObj, new object[] { 0, 0, false } );
      }
      catch (COMException) {
         Console.WriteLine("Unable to instantiate object.");   
      }
   }
}
// The example displays the following output:
//    Instantiated Type object from CLSID {000209FF-0000-0000-C000-000000000046}
//    Instantiated Microsoft.Office.Interop.Word.ApplicationClass
Imports System.Reflection
Imports System.Runtime.InteropServices

Module Example
   Private Const WORD_CLSID As String = "{000209FF-0000-0000-C000-000000000046}"
   
   Public Sub Main()
      ' Start an instance of the Word application.
      Dim word As Type = Type.GetTypeFromCLSID(Guid.Parse(WORD_CLSID), "computer17.central.contoso.com")
      Console.WriteLine("Instantiated Type object from CLSID {0}",
                        WORD_CLSID)
      Try
         Dim wordObj As Object = Activator.CreateInstance(word)
         Console.WriteLine("Instantiated {0}", 
                           wordObj.GetType().FullName)
         
         ' Close Word.
         word.InvokeMember("Quit", BindingFlags.InvokeMethod, Nothing, 
                           wordObj, New Object() { 0, 0, False } )
      Catch e As COMException
         Console.WriteLine("Unable to instantiate object.")
      End Try
   End Sub
End Module
' The example displays the following output:
'    Instantiated Type object from CLSID {000209FF-0000-0000-C000-000000000046}
'    Instantiated Microsoft.Office.Interop.Word.ApplicationClass

Hinweise

Die -Methode unterstützt spät gebundenen Zugriff auf nicht verwaltete COM-Objekte von .NET Framework-Apps, wenn Sie den Klassenbezeichner GetTypeFromCLSID (CLSID) des COM-Objekts kennen. Der Klassenbezeichner für COM-Klassen wird im HKEY_CLASSES_ROOT\CLSID-Schlüssel der Registrierung definiert. Sie können den Wert der -Eigenschaft abrufen, um zu bestimmen, ob der von dieser Methode zurückgegebene Typ IsCOMObject ein COM-Objekt ist.

Tipp

Sie können die -Methode für den spät gebundenen Zugriff auf COM-Objekte aufrufen, GetTypeFromProgID deren programmgesteuerter Bezeichner (ProgID) Sie kennen.

Das Instanziieren eines nicht verwalteten COM-Objekts aus seiner CLSID ist ein zweistufiger Prozess:

  1. Rufen Sie ein Type -Objekt ab, das __ComObject den darstellt, der der CLSID entspricht, indem Sie die -Methode GetTypeFromCLSID aufrufen.

  2. Rufen Sie die Activator.CreateInstance(Type) -Methode auf, um das COM-Objekt zu instanziieren.

Hinweise für Aufrufer

Diese Methode ist für die Verwendung mit COM-Objekten vorgesehen, nicht mit .NET Framework Objekten. Alle verwalteten Objekte, einschließlich der objekte, die für COM sichtbar sind (d. h. ihr Attribut ist ), verfügen über eine ComVisibleAttribute true GUID, die von der -Eigenschaft zurückgegeben GUID wird. Obwohl die -Methode ein -Objekt zurückgibt, das der GUID für .NET Framework-Objekte entspricht, können Sie dieses Objekt nicht zum Erstellen einer Typinstanz verwenden, indem Sie die -Methode aufrufen, wie im folgenden Type Type Beispiel CreateInstance(Type) gezeigt.

using System;
using System.Runtime.InteropServices;

[assembly:ComVisible(true)]

// Define two classes, and assign one an explicit GUID.
[GuidAttribute("d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4")]
public class ExplicitGuid
{ }

public class NoExplicitGuid
{ }

public class Example
{
   public static void Main()
   {
      Type explicitType = typeof(ExplicitGuid);
      Guid explicitGuid = explicitType.GUID;
      
      // Get type of ExplicitGuid from its GUID.
      Type explicitCOM = Type.GetTypeFromCLSID(explicitGuid);
      Console.WriteLine("Created {0} type from CLSID {1}",
                        explicitCOM.Name, explicitGuid);
                        
      // Compare the two type objects.
      Console.WriteLine("{0} and {1} equal: {2}",
                        explicitType.Name, explicitCOM.Name,
                        explicitType.Equals(explicitCOM));                  
      
      // Instantiate an ExplicitGuid object.
      try {
         Object obj = Activator.CreateInstance(explicitCOM);
         Console.WriteLine("Instantiated a {0} object", obj.GetType().Name);
      } 
      catch (COMException e) {
         Console.WriteLine("COM Exception:\n{0}\n", e.Message);   
      } 
        
      Type notExplicit = typeof(NoExplicitGuid);
      Guid notExplicitGuid = notExplicit.GUID;
      
      // Get type of ExplicitGuid from its GUID.
      Type notExplicitCOM = Type.GetTypeFromCLSID(notExplicitGuid);
      Console.WriteLine("Created {0} type from CLSID {1}",
                        notExplicitCOM.Name, notExplicitGuid);
                        
      // Compare the two type objects.
      Console.WriteLine("{0} and {1} equal: {2}",
                        notExplicit.Name, notExplicitCOM.Name,
                        notExplicit.Equals(notExplicitCOM));                  
      
      // Instantiate an ExplicitGuid object.
      try {
         Object obj = Activator.CreateInstance(notExplicitCOM);
         Console.WriteLine("Instantiated a {0} object", obj.GetType().Name);
      } 
      catch (COMException e) {
         Console.WriteLine("COM Exception:\n{0}\n", e.Message);   
      }   
   }
}
// The example displays the following output:
//       Created __ComObject type from CLSID d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4
//       ExplicitGuid and __ComObject equal: False
//       COM Exception:
//       Retrieving the COM class factory for component with CLSID 
//       {D055CBA3-1F83-4BD7-BA19-E22B1B8EC3C4} failed due to the following error: 
//       80040154 Class not registered 
//       (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
//       
//       Created __ComObject type from CLSID 74f03346-a718-3516-ac78-f351c7459ffb
//       NoExplicitGuid and __ComObject equal: False
//       COM Exception:
//       Retrieving the COM class factory for component with CLSID 
//       {74F03346-A718-3516-AC78-F351C7459FFB} failed due to the following error: 
//       80040154 Class not registered 
//       (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Stattdessen sollte nur verwendet werden, um die GUID eines nicht verwalteten COM-Objekts abzurufen, und das resultierende Objekt, das an die -Methode übergeben wird, muss ein nicht GetTypeFromCLSID(Guid, String, Boolean) Type CreateInstance(Type) verwaltetes COM-Objekt darstellen.

Gilt für:

GetTypeFromCLSID(Guid, Boolean)

Ruft den Typ ab, dem die angegebene Klassen-ID (CLSID) zugeordnet ist. Dabei wird angegeben, ob bei Auftreten eines Fehlers beim Laden des Typs eine Ausnahme ausgelöst werden soll.

public:
 static Type ^ GetTypeFromCLSID(Guid clsid, bool throwOnError);
public static Type? GetTypeFromCLSID (Guid clsid, bool throwOnError);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid, bool throwOnError);
public static Type GetTypeFromCLSID (Guid clsid, bool throwOnError);
static member GetTypeFromCLSID : Guid * bool -> Type
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetTypeFromCLSID : Guid * bool -> Type
Public Shared Function GetTypeFromCLSID (clsid As Guid, throwOnError As Boolean) As Type

Parameter

clsid
Guid

Die CLSID des abzurufenden Typs.

throwOnError
Boolean

true, um mögliche Ausnahmen auszulösen.

- oder - false, um Ausnahmen zu ignorieren.

Gibt zurück

Type

System.__ComObject unabhängig von der Gültigkeit der CLSID.

Attribute

Beispiele

Im folgenden Beispiel wird die CLSID des Anwendungsobjekts Microsoft Word verwendet, um einen COM-Typ abzurufen, der die Microsoft Word darstellt. Anschließend wird der Typ durch Aufrufen der -Methode instanziiert und durch Aufrufen der Activator.CreateInstance Application.Quit-Methode geschlossen. Eine Ausnahme wird ausgelöst, wenn beim Laden des Typs ein Fehler auftritt.

using System;
using System.Reflection;
using System.Runtime.InteropServices;

public class Example
{
   private const string WORD_CLSID = "{000209FF-0000-0000-C000-000000000046}";
   
   public static void Main()
   {
      try {
         // Start an instance of the Word application.
         var word = Type.GetTypeFromCLSID(Guid.Parse(WORD_CLSID), true);
         Console.WriteLine("Instantiated Type object from CLSID {0}",
                           WORD_CLSID);
         Object wordObj = Activator.CreateInstance(word);
         Console.WriteLine("Instantiated {0}", 
                           wordObj.GetType().FullName, WORD_CLSID);
         
         // Close Word.
         word.InvokeMember("Quit", BindingFlags.InvokeMethod, null, 
                           wordObj, new object[] { 0, 0, false } );
      }
      catch (Exception) {
         Console.WriteLine("Unable to instantiate an object for {0}", WORD_CLSID);
      }
   }
}
// The example displays the following output:
//    Instantiated Type object from CLSID {000209FF-0000-0000-C000-000000000046}
//    Instantiated Microsoft.Office.Interop.Word.ApplicationClass
Imports System.Reflection
Imports System.Runtime.InteropServices

Module Example
   Private Const WORD_CLSID As String = "{000209FF-0000-0000-C000-000000000046}"
   
   Public Sub Main()
      ' Start an instance of the Word application.
      Try
         Dim word As Type = Type.GetTypeFromCLSID(Guid.Parse(WORD_CLSID), True)
         Console.WriteLine("Instantiated Type object from CLSID {0}",
                           WORD_CLSID)
         Dim wordObj As Object = Activator.CreateInstance(word)
         Console.WriteLine("Instantiated {0}", 
                           wordObj.GetType().FullName)
         
         ' Close Word.
         word.InvokeMember("Quit", BindingFlags.InvokeMethod, Nothing, 
                           wordObj, New Object() { 0, 0, False } )
      ' The method can throw any of a number of unexpected exceptions.
      Catch e As Exception
         Console.WriteLine("Unable to instantiate an object for {0}", WORD_CLSID)
      End Try
   End Sub
End Module
' The example displays the following output:
'    Instantiated Type object from CLSID {000209FF-0000-0000-C000-000000000046}
'    Instantiated Microsoft.Office.Interop.Word.ApplicationClass

Hinweise

Die -Methode unterstützt spät gebundenen Zugriff auf nicht verwaltete COM-Objekte von .NET Framework-Apps, wenn Sie den Klassenbezeichner GetTypeFromCLSID (CLSID) des COM-Objekts kennen. Der Klassenbezeichner für COM-Klassen wird im HKEY_CLASSES_ROOT\CLSID-Schlüssel der Registrierung definiert. Sie können den Wert der -Eigenschaft abrufen, um zu bestimmen, ob der von dieser Methode zurückgegebene Typ IsCOMObject ein COM-Objekt ist.

Tipp

Sie können die -Methode für den spät gebundenen Zugriff auf COM-Objekte aufrufen, GetTypeFromProgID deren programmgesteuerter Bezeichner (ProgID) Sie kennen.

Das Instanziieren eines nicht verwalteten COM-Objekts aus seiner CLSID ist ein zweistufiger Prozess:

  1. Rufen Sie ein Type -Objekt ab, das __ComObject den darstellt, der der CLSID entspricht, indem Sie die -Methode GetTypeFromCLSID aufrufen.

  2. Rufen Sie die Activator.CreateInstance(Type) -Methode auf, um das COM-Objekt zu instanziieren.

Eine Abbildung finden Sie im Beispiel.

Ausnahmen wie werden ausgelöst, wenn für angegeben wird, bei nicht OutOfMemoryException true throwOnError registrierten CLSIDs wird jedoch kein Fehler ausgelöst.

Hinweise für Aufrufer

Diese Methode ist für die Verwendung mit COM-Objekten vorgesehen, nicht mit .NET Framework Objekten. Alle verwalteten Objekte, einschließlich der objekte, die für COM sichtbar sind (d. h. ihr Attribut ist ), verfügen über eine ComVisibleAttribute true GUID, die von der -Eigenschaft zurückgegeben GUID wird. Obwohl die -Methode ein -Objekt zurückgibt, das der GUID für .NET Framework-Objekte entspricht, können Sie dieses Objekt nicht zum Erstellen einer Typinstanz verwenden, indem Sie die -Methode aufrufen, wie im folgenden Type Type Beispiel CreateInstance(Type) gezeigt.

using System;
using System.Runtime.InteropServices;

[assembly:ComVisible(true)]

// Define two classes, and assign one an explicit GUID.
[GuidAttribute("d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4")]
public class ExplicitGuid
{ }

public class NoExplicitGuid
{ }

public class Example
{
   public static void Main()
   {
      Type explicitType = typeof(ExplicitGuid);
      Guid explicitGuid = explicitType.GUID;
      
      // Get type of ExplicitGuid from its GUID.
      Type explicitCOM = Type.GetTypeFromCLSID(explicitGuid);
      Console.WriteLine("Created {0} type from CLSID {1}",
                        explicitCOM.Name, explicitGuid);
                        
      // Compare the two type objects.
      Console.WriteLine("{0} and {1} equal: {2}",
                        explicitType.Name, explicitCOM.Name,
                        explicitType.Equals(explicitCOM));                  
      
      // Instantiate an ExplicitGuid object.
      try {
         Object obj = Activator.CreateInstance(explicitCOM);
         Console.WriteLine("Instantiated a {0} object", obj.GetType().Name);
      } 
      catch (COMException e) {
         Console.WriteLine("COM Exception:\n{0}\n", e.Message);   
      } 
        
      Type notExplicit = typeof(NoExplicitGuid);
      Guid notExplicitGuid = notExplicit.GUID;
      
      // Get type of ExplicitGuid from its GUID.
      Type notExplicitCOM = Type.GetTypeFromCLSID(notExplicitGuid);
      Console.WriteLine("Created {0} type from CLSID {1}",
                        notExplicitCOM.Name, notExplicitGuid);
                        
      // Compare the two type objects.
      Console.WriteLine("{0} and {1} equal: {2}",
                        notExplicit.Name, notExplicitCOM.Name,
                        notExplicit.Equals(notExplicitCOM));                  
      
      // Instantiate an ExplicitGuid object.
      try {
         Object obj = Activator.CreateInstance(notExplicitCOM);
         Console.WriteLine("Instantiated a {0} object", obj.GetType().Name);
      } 
      catch (COMException e) {
         Console.WriteLine("COM Exception:\n{0}\n", e.Message);   
      }   
   }
}
// The example displays the following output:
//       Created __ComObject type from CLSID d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4
//       ExplicitGuid and __ComObject equal: False
//       COM Exception:
//       Retrieving the COM class factory for component with CLSID 
//       {D055CBA3-1F83-4BD7-BA19-E22B1B8EC3C4} failed due to the following error: 
//       80040154 Class not registered 
//       (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
//       
//       Created __ComObject type from CLSID 74f03346-a718-3516-ac78-f351c7459ffb
//       NoExplicitGuid and __ComObject equal: False
//       COM Exception:
//       Retrieving the COM class factory for component with CLSID 
//       {74F03346-A718-3516-AC78-F351C7459FFB} failed due to the following error: 
//       80040154 Class not registered 
//       (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Stattdessen sollte nur verwendet werden, um die GUID eines nicht verwalteten COM-Objekts abzurufen, und das resultierende Objekt, das an die -Methode übergeben wird, muss ein nicht GetTypeFromCLSID(Guid, String, Boolean) Type CreateInstance(Type) verwaltetes COM-Objekt darstellen.

Gilt für:

GetTypeFromCLSID(Guid)

Ruft den Typ ab, dem die angegebene Klassen-ID (CLSID) zugeordnet ist.

public:
 static Type ^ GetTypeFromCLSID(Guid clsid);
public static Type? GetTypeFromCLSID (Guid clsid);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid);
public static Type GetTypeFromCLSID (Guid clsid);
static member GetTypeFromCLSID : Guid -> Type
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetTypeFromCLSID : Guid -> Type
Public Shared Function GetTypeFromCLSID (clsid As Guid) As Type

Parameter

clsid
Guid

Die CLSID des abzurufenden Typs.

Gibt zurück

Type

System.__ComObject unabhängig von der Gültigkeit der CLSID.

Attribute

Beispiele

Im folgenden Beispiel wird die CLSID des Anwendungsobjekts Microsoft Word verwendet, um einen COM-Typ abzurufen, der die Microsoft Word darstellt. Anschließend wird der Typ durch Aufrufen der -Methode instanziiert und durch Aufrufen der Activator.CreateInstance Application.Quit-Methode geschlossen.

using System;
using System.Reflection;
using System.Runtime.InteropServices;

public class Example
{
   private const string WORD_CLSID = "{000209FF-0000-0000-C000-000000000046}";
   
   public static void Main()
   {
      // Start an instance of the Word application.
      var word = Type.GetTypeFromCLSID(Guid.Parse(WORD_CLSID));
      Console.WriteLine("Instantiated Type object from CLSID {0}",
                        WORD_CLSID);
      Object wordObj = Activator.CreateInstance(word);
      Console.WriteLine("Instantiated {0}", 
                        wordObj.GetType().FullName);
      
      // Close Word.
      word.InvokeMember("Quit", BindingFlags.InvokeMethod, null, 
                        wordObj, new object[] { 0, 0, false } );
   }
}
// The example displays the following output:
//    Instantiated Type object from CLSID {000209FF-0000-0000-C000-000000000046}
//    Instantiated Microsoft.Office.Interop.Word.ApplicationClass
Imports System.Reflection
Imports System.Runtime.InteropServices

Module Example
   Private Const WORD_CLSID As String = "{000209FF-0000-0000-C000-000000000046}"
   
   Public Sub Main()
      ' Start an instance of the Word application.
      Dim word As Type = Type.GetTypeFromCLSID(Guid.Parse(WORD_CLSID))
      Console.WriteLine("Instantiated Type object from CLSID {0}",
                        WORD_CLSID)
      Dim wordObj As Object = Activator.CreateInstance(word)
      Console.WriteLine("Instantiated {0}", 
                        wordObj.GetType().FullName)
      
      ' Close Word.
      word.InvokeMember("Quit", BindingFlags.InvokeMethod, Nothing, 
                        wordObj, New Object() { 0, 0, False } )
   End Sub
End Module
' The example displays the following output:
'    Instantiated Type object from CLSID {000209FF-0000-0000-C000-000000000046}
'    Instantiated Microsoft.Office.Interop.Word.ApplicationClass

Hinweise

Die -Methode unterstützt spät gebundenen Zugriff auf nicht verwaltete COM-Objekte von .NET Framework-Apps, wenn Sie den Klassenbezeichner GetTypeFromCLSID (CLSID) des COM-Objekts kennen. Der Klassenbezeichner für COM-Klassen wird im HKEY_CLASSES_ROOT\CLSID-Schlüssel der Registrierung definiert. Sie können den Wert der -Eigenschaft abrufen, um zu bestimmen, ob der von dieser Methode zurückgegebene Typ IsCOMObject ein COM-Objekt ist.

Tipp

Sie können die -Methode für den spät gebundenen Zugriff auf COM-Objekte aufrufen, GetTypeFromProgID deren programmgesteuerter Bezeichner (ProgID) Sie kennen.

Das Instanziieren eines nicht verwalteten COM-Objekts aus seiner CLSID ist ein zweistufiger Prozess:

  1. Rufen Sie ein Type -Objekt ab, das __ComObject den darstellt, der der CLSID entspricht, indem Sie die -Methode GetTypeFromCLSID aufrufen.

  2. Rufen Sie die Activator.CreateInstance(Type) -Methode auf, um das COM-Objekt zu instanziieren.

Eine Abbildung finden Sie im Beispiel.

Die GetTypeFromCLSID(Guid) -Überladung ignoriert alle Ausnahmen, die beim Instanziieren eines -Objekts Type basierend auf dem -Argument auftreten clsid können. Beachten Sie, dass keine Ausnahme ausgelöst wird, clsid wenn nicht in der Registrierung gefunden wird.

Hinweise für Aufrufer

Diese Methode ist für die Verwendung mit COM-Objekten vorgesehen, nicht mit .NET Framework Objekten. Alle verwalteten Objekte, einschließlich der objekte, die für COM sichtbar sind (d. h. ihr Attribut ist ), verfügen über eine ComVisibleAttribute true GUID, die von der -Eigenschaft zurückgegeben GUID wird. Obwohl die -Methode ein -Objekt zurückgibt, das der GUID für .NET Framework-Objekte entspricht, können Sie dieses Objekt nicht zum Erstellen einer Typinstanz verwenden, indem Sie die -Methode aufrufen, wie im folgenden Type Type Beispiel CreateInstance(Type) gezeigt.

using System;
using System.Runtime.InteropServices;

[assembly:ComVisible(true)]

// Define two classes, and assign one an explicit GUID.
[GuidAttribute("d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4")]
public class ExplicitGuid
{ }

public class NoExplicitGuid
{ }

public class Example
{
   public static void Main()
   {
      Type explicitType = typeof(ExplicitGuid);
      Guid explicitGuid = explicitType.GUID;
      
      // Get type of ExplicitGuid from its GUID.
      Type explicitCOM = Type.GetTypeFromCLSID(explicitGuid);
      Console.WriteLine("Created {0} type from CLSID {1}",
                        explicitCOM.Name, explicitGuid);
                        
      // Compare the two type objects.
      Console.WriteLine("{0} and {1} equal: {2}",
                        explicitType.Name, explicitCOM.Name,
                        explicitType.Equals(explicitCOM));                  
      
      // Instantiate an ExplicitGuid object.
      try {
         Object obj = Activator.CreateInstance(explicitCOM);
         Console.WriteLine("Instantiated a {0} object", obj.GetType().Name);
      } 
      catch (COMException e) {
         Console.WriteLine("COM Exception:\n{0}\n", e.Message);   
      } 
        
      Type notExplicit = typeof(NoExplicitGuid);
      Guid notExplicitGuid = notExplicit.GUID;
      
      // Get type of ExplicitGuid from its GUID.
      Type notExplicitCOM = Type.GetTypeFromCLSID(notExplicitGuid);
      Console.WriteLine("Created {0} type from CLSID {1}",
                        notExplicitCOM.Name, notExplicitGuid);
                        
      // Compare the two type objects.
      Console.WriteLine("{0} and {1} equal: {2}",
                        notExplicit.Name, notExplicitCOM.Name,
                        notExplicit.Equals(notExplicitCOM));                  
      
      // Instantiate an ExplicitGuid object.
      try {
         Object obj = Activator.CreateInstance(notExplicitCOM);
         Console.WriteLine("Instantiated a {0} object", obj.GetType().Name);
      } 
      catch (COMException e) {
         Console.WriteLine("COM Exception:\n{0}\n", e.Message);   
      }   
   }
}
// The example displays the following output:
//       Created __ComObject type from CLSID d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4
//       ExplicitGuid and __ComObject equal: False
//       COM Exception:
//       Retrieving the COM class factory for component with CLSID 
//       {D055CBA3-1F83-4BD7-BA19-E22B1B8EC3C4} failed due to the following error: 
//       80040154 Class not registered 
//       (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
//       
//       Created __ComObject type from CLSID 74f03346-a718-3516-ac78-f351c7459ffb
//       NoExplicitGuid and __ComObject equal: False
//       COM Exception:
//       Retrieving the COM class factory for component with CLSID 
//       {74F03346-A718-3516-AC78-F351C7459FFB} failed due to the following error: 
//       80040154 Class not registered 
//       (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Stattdessen sollte nur verwendet werden, um die GUID eines nicht verwalteten COM-Objekts abzurufen, und das resultierende Objekt, das an die -Methode übergeben wird, muss ein nicht GetTypeFromCLSID(Guid, String, Boolean) Type CreateInstance(Type) verwaltetes COM-Objekt darstellen.

Gilt für: