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)

 

Veröffentlicht: Oktober 2016

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

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

public static Type GetTypeFromCLSID(
	Guid clsid,
	string server
)

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.

Rückgabewert

Type: System.Type

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

Die GetTypeFromCLSID Methode unterstützt spät gebundener Zugriff auf nicht verwalteten COM-Objekte aus .NET Framework-apps, wenn Sie wissen, dass der Klassenbezeichner (CLSID) der COM-Objekt. 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, um zu bestimmen, ob der Typ, der von dieser Methode zurückgegebene COM-Objekt ist.

System_CAPS_tipTipp

Sie erreichen die GetTypeFromProgID Methode für spät gebundener Zugriff für 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 die CLSID durch Aufrufen der GetTypeFromCLSID Methode.

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

Hinweise für Aufrufer:

Diese Methode dient zur Verwendung 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. deren ComVisibleAttribute -Attribut ist true) haben eine GUID, die von zurückgegeben wird die GUID Eigenschaft. Obwohl die Methode gibt ein Type -Objekten Objekt, das die GUID für .NET Framework entspricht, kann nicht verwendet Type Objekt so erstellen eine Instanz eines Datentyps 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)).

Stattdessen die GetTypeFromCLSID sollte nur verwendet werden, um die GUID der nicht verwaltete COM-Objekte und die resultierende abrufenType -Objekt, das an die Activator.CreateInstanceMethode muss ein nicht verwaltetes COM-Objekt darstellen.

Im folgenden Beispiel wird die CLSID der Microsoft Word Application object ein COM-Typs abgerufen, die die Microsoft Word-Anwendung von einem pullserver namens 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.

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

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