Type.GetTypeFromCLSID 方法

定义

获取与指定类标识符 (CLSID) 关联的类型。

重载

GetTypeFromCLSID(Guid)

获取与指定类标识符 (CLSID) 关联的类型。

GetTypeFromCLSID(Guid, Boolean)

获取与指定类标识符 (CLSID) 关联的类型,指定在加载该类型时如果发生错误是否引发异常。

GetTypeFromCLSID(Guid, String)

从指定服务器获取与指定类标识符 (CLSID) 关联的类型。

GetTypeFromCLSID(Guid, String, Boolean)

从指定服务器获取与指定类标识符 (CLSID) 关联的类型,指定在加载该类型时如果发生错误是否引发异常。

GetTypeFromCLSID(Guid)

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

获取与指定类标识符 (CLSID) 关联的类型。

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);

参数

clsid
Guid

要获取的类型的 CLSID。

返回

System.__ComObject,无论 CLSID 是否有效。

属性

示例

以下示例使用 Microsoft Word 应用程序对象的 CLSID 检索表示 Microsoft Word 应用程序的 COM 类型。 然后,它通过调用 Activator.CreateInstance 方法实例化类型,并通过调用 Application.Quit 方法将其关闭。

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

注解

GetTypeFromCLSID当你知道 COM 对象的类标识符 (CLSID) 时, 方法支持从.NET Framework应用中对非托管 COM 对象的后期绑定访问。 COM 类的类标识符在注册表的 HKEY_CLASSES_ROOT\CLSID 键中定义。 可以检索 属性的值, IsCOMObject 以确定此方法返回的类型是否为 COM 对象。

提示

可以调用 GetTypeFromProgID 方法,以便对 COM 对象的后期绑定访问,这些对象的编程标识符 (ProgID) 你知道。

从其 CLSID 实例化非托管 COM 对象的过程分为两步:

  1. 通过调用 方法获取表示Type__ComObject对应于 CLSID 的 GetTypeFromCLSID 对象。

  2. Activator.CreateInstance(Type)调用 方法以实例化 COM 对象。

有关插图,请参阅示例。

GetTypeFromCLSID(Guid)载会忽略在基于 clsid 参数实例化 Type 对象时可能发生的任何异常。 请注意,如果在 clsid 注册表中找不到 ,则不会引发异常。

调用方说明

此方法适用于处理 COM 对象时,不适用于.NET Framework对象。 所有托管对象,包括 COM (即,其 ComVisibleAttribute 属性 true) 具有由 GUID 属性返回的 GUID。 尽管 方法返回与 Type .NET Framework 对象的 GUID 对应的 对象,但不能Type使用该对象通过调用 CreateInstance(Type) 方法创建类型实例,如以下示例所示。

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)).

相反, GetTypeFromCLSID(Guid, String, Boolean) 只应用于检索非托管 COM 对象的 GUID,传递给 方法的结果 Type 对象 CreateInstance(Type) 必须表示非托管 COM 对象。

适用于

.NET 9 和其他版本
产品 版本
.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)

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

获取与指定类标识符 (CLSID) 关联的类型,指定在加载该类型时如果发生错误是否引发异常。

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);

参数

clsid
Guid

要获取的类型的 CLSID。

throwOnError
Boolean

true 将引发所发生的任何异常。

false 将忽略所发生的任何异常。

返回

System.__ComObject,无论 CLSID 是否有效。

属性

示例

以下示例使用 Microsoft Word 应用程序对象的 CLSID 检索表示 Microsoft Word 应用程序的 COM 类型。 然后,它通过调用 Activator.CreateInstance 方法实例化类型,并通过调用 Application.Quit 方法将其关闭。 如果在加载类型时发生错误,则会引发异常。

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

注解

GetTypeFromCLSID当你知道 COM 对象的类标识符 (CLSID) 时, 方法支持从.NET Framework应用中对非托管 COM 对象的后期绑定访问。 COM 类的类标识符在注册表的 HKEY_CLASSES_ROOT\CLSID 键中定义。 可以检索 属性的值, IsCOMObject 以确定此方法返回的类型是否为 COM 对象。

提示

可以调用 GetTypeFromProgID 方法,以便对 COM 对象的后期绑定访问,这些对象的编程标识符 (ProgID) 你知道。

从其 CLSID 实例化非托管 COM 对象的过程分为两步:

  1. 通过调用 方法获取表示Type__ComObject对应于 CLSID 的 GetTypeFromCLSID 对象。

  2. Activator.CreateInstance(Type)调用 方法以实例化 COM 对象。

有关插图,请参阅示例。

为 指定 truethrowOnError时,将引发异常,例如 OutOfMemoryException ,但对于未注册的 CLSD,它不会失败。

调用方说明

此方法适用于处理 COM 对象时,不适用于.NET Framework对象。 所有托管对象,包括 COM (即,其 ComVisibleAttribute 属性 true) 具有由 GUID 属性返回的 GUID。 尽管 方法返回与 Type .NET Framework 对象的 GUID 对应的 对象,但不能Type使用该对象通过调用 CreateInstance(Type) 方法创建类型实例,如以下示例所示。

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)).

相反, GetTypeFromCLSID(Guid, String, Boolean) 只应用于检索非托管 COM 对象的 GUID,传递给 方法的结果 Type 对象 CreateInstance(Type) 必须表示非托管 COM 对象。

适用于

.NET 9 和其他版本
产品 版本
.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)

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

从指定服务器获取与指定类标识符 (CLSID) 关联的类型。

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);

参数

clsid
Guid

要获取的类型的 CLSID。

server
String

用于从中加载该类型的服务器。 如果服务器名称为 null,则此方法会自动恢复到本地计算机上。

返回

System.__ComObject,无论 CLSID 是否有效。

属性

示例

以下示例使用 Microsoft Word 应用程序对象的 CLSID 从名为 computer17.central.contoso.com 的服务器检索表示 Microsoft Word 应用程序的 COM 类型。 然后,它通过调用 Activator.CreateInstance 方法实例化类型,并通过调用 Application.Quit 方法将其关闭。

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

注解

GetTypeFromCLSID当你知道 COM 对象的类标识符 (CLSID) 时, 方法支持从.NET Framework应用中对非托管 COM 对象的后期绑定访问。 COM 类的类标识符在注册表的 HKEY_CLASSES_ROOT\CLSID 键中定义。 可以检索 属性的值, IsCOMObject 以确定此方法返回的类型是否为 COM 对象。

提示

可以调用 GetTypeFromProgID 方法,以便对 COM 对象的后期绑定访问,这些对象的编程标识符 (ProgID) 你知道。

从其 CLSID 实例化非托管 COM 对象的过程分为两步:

  1. 通过调用 方法获取表示Type__ComObject对应于 CLSID 的 GetTypeFromCLSID 对象。

  2. Activator.CreateInstance(Type)调用 方法以实例化 COM 对象。

调用方说明

此方法适用于处理 COM 对象时,不适用于.NET Framework对象。 所有托管对象,包括 COM (即,其 ComVisibleAttribute 属性 true) 具有由 GUID 属性返回的 GUID。 尽管 方法返回与 Type .NET Framework 对象的 GUID 对应的 对象,但不能Type使用该对象通过调用 CreateInstance(Type) 方法创建类型实例,如以下示例所示。

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)).

相反, GetTypeFromCLSID(Guid, String, Boolean) 只应用于检索非托管 COM 对象的 GUID,传递给 方法的结果 Type 对象 CreateInstance(Type) 必须表示非托管 COM 对象。

适用于

.NET 9 和其他版本
产品 版本
.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)

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

从指定服务器获取与指定类标识符 (CLSID) 关联的类型,指定在加载该类型时如果发生错误是否引发异常。

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);

参数

clsid
Guid

要获取的类型的 CLSID。

server
String

用于从中加载该类型的服务器。 如果服务器名称为 null,则此方法会自动恢复到本地计算机上。

throwOnError
Boolean

true 将引发所发生的任何异常。

false 将忽略所发生的任何异常。

返回

System.__ComObject,无论 CLSID 是否有效。

属性

示例

以下示例使用 Microsoft Word 应用程序对象的 CLSID 从名为 computer17.central.contoso.com 的服务器检索表示 Microsoft Word 应用程序的 COM 类型。 然后,它通过调用 Activator.CreateInstance 方法实例化类型,并通过调用 Application.Quit 方法将其关闭。 如果在加载类型时发生错误,则会引发异常。

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

注解

GetTypeFromCLSID当你知道 COM 对象的类标识符 (CLSID) 时, 方法支持从.NET Framework应用中对非托管 COM 对象的后期绑定访问。 COM 类的类标识符在注册表的 HKEY_CLASSES_ROOT\CLSID 键中定义。 可以检索 属性的值, IsCOMObject 以确定此方法返回的类型是否为 COM 对象。

提示

可以调用 GetTypeFromProgID 方法,以便对 COM 对象的后期绑定访问,这些对象的编程标识符 (ProgID) 你知道。

从其 CLSID 实例化非托管 COM 对象的过程分为两步:

  1. 通过调用 方法获取表示Type__ComObject对应于 CLSID 的 GetTypeFromCLSID 对象。

  2. Activator.CreateInstance(Type)调用 方法以实例化 COM 对象。

为 指定 truethrowOnError时,将引发异常,例如 OutOfMemoryException ,但对于未注册的 CLSD,它不会失败。

调用方说明

此方法适用于处理 COM 对象时,不适用于.NET Framework对象。 所有托管对象,包括 COM (即,其 ComVisibleAttribute 属性 true) 具有由 GUID 属性返回的 GUID。 GetTypeFromCLSID(Guid, String, Boolean)尽管 该方法返回的对象Type对应于特定托管对象的 GUID,但不能Type使用该对象通过调用 CreateInstance(Type) 方法创建类型实例,如以下示例所示。

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)).

相反, GetTypeFromCLSID(Guid, String, Boolean) 只应用于检索非托管 COM 对象的 GUID,传递给 方法的结果 Type 对象 CreateInstance(Type) 必须表示非托管 COM 对象。

适用于

.NET 9 和其他版本
产品 版本
.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