Auf Englisch lesen

Teilen über


Type.GetTypeFromCLSID Methode

Definition

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

Überlädt

GetTypeFromCLSID(Guid)

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

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, String)

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

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)

Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs

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

C#
public static Type? GetTypeFromCLSID (Guid clsid);
C#
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid);
C#
public static Type GetTypeFromCLSID (Guid clsid);

Parameter

clsid
Guid

Die CLSID des abzurufenden Typs.

Gibt zurück

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 darstellt. Anschließend instanziiert er den Typ durch Aufrufen der Activator.CreateInstance -Methode und schließt ihn durch Aufrufen der Application.Quit-Methode .

C#
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

Hinweise

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

Tipp

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

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

  1. Rufen Sie durch Aufrufen der__ComObject -Methode ein Type -Objekt ab, das der GetTypeFromCLSID CLSID entspricht.

  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 auftreten können, wenn ein Type Objekt basierend auf dem clsid Argument instanziiert wird. Beachten Sie, dass keine Ausnahme ausgelöst wird, wenn clsid in der Registrierung nicht 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 für COM sichtbaren Objekte (d. h. ihr ComVisibleAttribute Attribut ist true) verfügen über eine GUID, die von der GUID -Eigenschaft zurückgegeben wird. Obwohl die -Methode ein Type Objekt zurückgibt, das der GUID für .NET Framework -Objekte entspricht, können Sie dieses Type Objekt nicht verwenden, um eine Typinstanz durch Aufrufen der CreateInstance(Type) -Methode zu erstellen, wie im folgenden Beispiel gezeigt.

C#
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 zum GetTypeFromCLSID(Guid, String, Boolean) Abrufen der GUID eines nicht verwalteten COM-Objekts verwendet werden, und das resultierende Type Objekt, das an die CreateInstance(Type) -Methode übergeben wird, muss ein nicht verwaltetes COM-Objekt darstellen.

Gilt für:

.NET 9 und andere Versionen
Produkt Versionen
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetTypeFromCLSID(Guid, Boolean)

Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs

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.

C#
public static Type? GetTypeFromCLSID (Guid clsid, bool throwOnError);
C#
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid, bool throwOnError);
C#
public static Type GetTypeFromCLSID (Guid clsid, bool throwOnError);

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

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 darstellt. Anschließend instanziiert er den Typ durch Aufrufen der Activator.CreateInstance -Methode und schließt ihn durch Aufrufen der Application.Quit-Methode . Eine Ausnahme wird ausgelöst, wenn beim Laden des Typs ein Fehler auftritt.

C#
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

Hinweise

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

Tipp

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

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

  1. Rufen Sie durch Aufrufen der __ComObject -Methode ein Type -Objekt ab, das der GetTypeFromCLSID CLSID entspricht.

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

Eine Abbildung finden Sie im Beispiel.

Ausnahmen wie OutOfMemoryException werden ausgelöst, wenn für throwOnErrorangegeben true wird, aber bei nicht registrierten CLSIDs tritt kein Fehler auf.

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 für COM sichtbaren Objekte (d. h. ihr ComVisibleAttribute Attribut ist true) verfügen über eine GUID, die von der GUID -Eigenschaft zurückgegeben wird. Obwohl die -Methode ein Type Objekt zurückgibt, das der GUID für .NET Framework -Objekte entspricht, können Sie dieses Type Objekt nicht verwenden, um eine Typinstanz durch Aufrufen der CreateInstance(Type) -Methode zu erstellen, wie im folgenden Beispiel gezeigt.

C#
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 zum GetTypeFromCLSID(Guid, String, Boolean) Abrufen der GUID eines nicht verwalteten COM-Objekts verwendet werden, und das resultierende Type Objekt, das an die CreateInstance(Type) -Methode übergeben wird, muss ein nicht verwaltetes COM-Objekt darstellen.

Gilt für:

.NET 9 und andere Versionen
Produkt Versionen
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetTypeFromCLSID(Guid, String)

Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs

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

C#
public static Type? GetTypeFromCLSID (Guid clsid, string? server);
C#
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid, string? server);
C#
public static Type GetTypeFromCLSID (Guid clsid, string server);

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.

Gibt zurück

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 darstellt. Anschließend instanziiert er den Typ durch Aufrufen der Activator.CreateInstance -Methode und schließt ihn durch Aufrufen der Application.Quit-Methode .

C#
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

Hinweise

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

Tipp

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

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

  1. Rufen Sie durch Aufrufen der __ComObject -Methode ein Type -Objekt ab, das der GetTypeFromCLSID CLSID entspricht.

  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 für COM sichtbaren Objekte (d. h. ihr ComVisibleAttribute Attribut ist true) verfügen über eine GUID, die von der GUID -Eigenschaft zurückgegeben wird. Obwohl die -Methode ein Type Objekt zurückgibt, das der GUID für .NET Framework -Objekte entspricht, können Sie dieses Type Objekt nicht verwenden, um eine Typinstanz durch Aufrufen der CreateInstance(Type) -Methode zu erstellen, wie im folgenden Beispiel gezeigt.

C#
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 zum GetTypeFromCLSID(Guid, String, Boolean) Abrufen der GUID eines nicht verwalteten COM-Objekts verwendet werden, und das resultierende Type Objekt, das an die CreateInstance(Type) -Methode übergeben wird, muss ein nicht verwaltetes COM-Objekt darstellen.

Gilt für:

.NET 9 und andere Versionen
Produkt Versionen
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetTypeFromCLSID(Guid, String, Boolean)

Quelle:
Type.cs
Quelle:
Type.cs
Quelle:
Type.cs

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.

C#
public static Type? GetTypeFromCLSID (Guid clsid, string? server, bool throwOnError);
C#
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid, string? server, bool throwOnError);
C#
public static Type GetTypeFromCLSID (Guid clsid, string server, bool throwOnError);

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

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 darstellt. Anschließend instanziiert er den Typ durch Aufrufen der Activator.CreateInstance -Methode und schließt ihn durch Aufrufen der Application.Quit-Methode . Eine Ausnahme wird ausgelöst, wenn beim Laden des Typs ein Fehler auftritt.

C#
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

Hinweise

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

Tipp

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

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

  1. Rufen Sie durch Aufrufen der __ComObject -Methode ein Type -Objekt ab, das der GetTypeFromCLSID CLSID entspricht.

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

Ausnahmen wie OutOfMemoryException werden ausgelöst, wenn für throwOnErrorangegeben true wird, aber bei nicht registrierten CLSIDs tritt kein Fehler auf.

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 für COM sichtbaren Objekte (d. h. ihr ComVisibleAttribute Attribut ist true) verfügen über eine GUID, die von der GUID -Eigenschaft zurückgegeben wird. Obwohl die GetTypeFromCLSID(Guid, String, Boolean) -Methode ein Type Objekt zurückgibt, das der GUID für ein bestimmtes verwaltetes Objekt entspricht, können Sie dieses Type Objekt nicht verwenden, um eine Typinstanz durch Aufrufen der CreateInstance(Type) -Methode zu erstellen, wie im folgenden Beispiel gezeigt.

C#
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 zum GetTypeFromCLSID(Guid, String, Boolean) Abrufen der GUID eines nicht verwalteten COM-Objekts verwendet werden, und das resultierende Type Objekt, das an die CreateInstance(Type) -Methode übergeben wird, muss ein nicht verwaltetes COM-Objekt darstellen.

Gilt für:

.NET 9 und andere Versionen
Produkt Versionen
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1