Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Type.GetTypeFromCLSID-Methode: (Guid, String, Boolean)

 

Veröffentlicht: Oktober 2016

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.

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

public static Type GetTypeFromCLSID(
	Guid clsid,
	string server,
	bool throwOnError
)

Parameter

clsid
Type: System.Guid

Die CLSID des abzurufenden Typs.

server
Type: System.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.

throwOnError
Type: System.Boolean

true, um mögliche Ausnahmen auszulösen.

- oder -

false, um Ausnahmen zu ignorieren.

Rückgabewert

Type: System.Type

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

Die GetTypeFromCLSID Methode unterstützt spät gebunden Zugriff auf nicht verwalteten COM-Objekte aus .NET Framework-apps, wenn Sie wissen, dass das COM-Objekt-Klassenbezeichner (CLSID). Die Klassen-ID für COM-Klassen wird in den Schlüssel HKEY_CLASSES_ROOT\CLSID der Registrierung definiert. Sie können den Wert der Abrufen der IsCOMObject -Eigenschaft bestimmt, ob der von dieser Methode zurückgegebene Typ ein COM-Objekt ist.

System_CAPS_tipTipp

Rufen Sie die GetTypeFromProgID Methode für den Zugriff mit später Bindung an COM-Objekte, deren programmatischen Bezeichner (ProgID), die Sie kennen.

Instanziieren ein nicht verwaltetes COM-Objekt aus seiner CLSID ist ein zweistufiger Prozess:

  1. Abrufen einer Type -Objekt, das darstellt der __ComObject entspricht der CLSID durch Aufrufen der GetTypeFromCLSID Methode.

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

Ausnahmen wie OutOfMemoryException wird ausgelöst, wenn die Angabe true für throwOnError, aber nicht registrierte CLSIDs führen nicht zu einem Fehler.

Hinweise für Aufrufer:

Diese Methode ist für die Verwendung vorgesehen, bei der Arbeit mit COM-Objekte nicht mit .NET Framework-Objekten. Alle verwalteten Objekte, einschließlich derer, die für COM sichtbar sind (d. h. ihre ComVisibleAttribute Attribut ist true) haben eine GUID, die von zurückgegeben wird dieGUIDEigenschaft. Obwohl dieGetTypeFromCLSID-Methode gibt ein Type Objekt, das die GUID für ein bestimmtes verwalteten Objekt entspricht, kann verwendet werden Type -Objekt zum Erstellen einer Typinstanz durch Aufrufen der Activator.CreateInstance -Methode wie im folgenden Beispiel 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)).

In diesem Fall die GetTypeFromCLSID sollte nur verwendet werden, um die GUID für eine nicht verwaltete COM-Objekt und das resultierende abzurufenType -Objekt, das an die Activator.CreateInstanceMethode muss ein nicht verwaltetes COM-Objekt darstellen.

Im folgenden Beispiel wird die CLSID des Microsoft Word Application object ein COM-Typs abrufen, die die Anwendung Microsoft Word auf einem Server mit dem Namen computer17.central.contoso.com darstellt. Dann instanziiert 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.

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

.NET Framework
Verfügbar seit 1.1
Zurück zum Anfang
Anzeigen: