Ler em inglês

Compartilhar via


Type.GetTypeFromCLSID Método

Definição

Obtém o tipo associado ao identificador de classe especificado (CLSID).

Sobrecargas

GetTypeFromCLSID(Guid)

Obtém o tipo associado ao identificador de classe especificado (CLSID).

GetTypeFromCLSID(Guid, Boolean)

Obtém o tipo associado ao CLSID (identificador de classe) especificado, especificando se deverá gerar uma exceção se ocorrer um erro ao carregar o tipo.

GetTypeFromCLSID(Guid, String)

Obtém o tipo associado ao CLSID (identificador de classe) especificado do servidor especificado.

GetTypeFromCLSID(Guid, String, Boolean)

Obtém o tipo associado ao CLSID (identificador de classe) especificado do servidor especificado, determinando se uma exceção deverá ser gerada se ocorrer um erro durante o carregamento do tipo.

GetTypeFromCLSID(Guid)

Origem:
Type.cs
Origem:
Type.cs
Origem:
Type.cs

Obtém o tipo associado ao identificador de classe especificado (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);

Parâmetros

clsid
Guid

O CLSID do tipo a ser obtido.

Retornos

System.__ComObject independentemente do CLSID ser válido.

Atributos

Exemplos

O exemplo a seguir usa o CLSID do objeto Microsoft Word Application para recuperar um tipo COM que representa o aplicativo Microsoft Word. Em seguida, ele cria uma instância do tipo chamando o Activator.CreateInstance método e o fecha chamando o método 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

Comentários

O GetTypeFromCLSID método dá suporte ao acesso de associação tardia a objetos COM não gerenciados de aplicativos .NET Framework quando você conhece o CLSID (identificador de classe) do objeto COM. O identificador de classe para classes COM é definido na chave HKEY_CLASSES_ROOT\CLSID do registro. Você pode recuperar o valor da IsCOMObject propriedade para determinar se o tipo retornado por esse método é um objeto COM.

Dica

Você pode chamar o GetTypeFromProgID método para acesso de associação tardia a objetos COM cujo identificador programático (ProgID) você conhece.

Criar uma instância de um objeto COM não gerenciado de seu CLSID é um processo de duas etapas:

  1. Obtenha um Type objeto que representa o__ComObject que corresponde ao CLSID chamando o GetTypeFromCLSID método .

  2. Chame o Activator.CreateInstance(Type) método para instanciar o objeto COM.

Consulte o exemplo para obter uma ilustração.

A GetTypeFromCLSID(Guid) sobrecarga ignora qualquer exceção que possa ocorrer ao instanciar um Type objeto com base no clsid argumento . Observe que nenhuma exceção será gerada se clsid não for encontrada no registro.

Notas aos Chamadores

Esse método destina-se ao uso ao trabalhar com objetos COM, não com objetos .NET Framework. Todos os objetos gerenciados, incluindo aqueles visíveis para COM (ou seja, seu ComVisibleAttribute atributo é true) têm um GUID retornado pela GUID propriedade . Embora o método retorne um Type objeto que corresponde ao GUID para objetos .NET Framework, você não pode usar esse Type objeto para criar uma instância de tipo chamando o CreateInstance(Type) método , como mostra o exemplo a seguir.

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

Em vez disso, o GetTypeFromCLSID(Guid, String, Boolean) deve ser usado apenas para recuperar o GUID de um objeto COM não gerenciado e o objeto resultante Type que é passado para o CreateInstance(Type) método deve representar um objeto COM não gerenciado.

Aplica-se a

.NET 9 e outras versões
Produto Versões
.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)

Origem:
Type.cs
Origem:
Type.cs
Origem:
Type.cs

Obtém o tipo associado ao CLSID (identificador de classe) especificado, especificando se deverá gerar uma exceção se ocorrer um erro ao carregar o tipo.

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

Parâmetros

clsid
Guid

O CLSID do tipo a ser obtido.

throwOnError
Boolean

true para gerar qualquer exceção que ocorra.

- ou -

false para ignorar qualquer exceção que ocorra.

Retornos

System.__ComObject independentemente do CLSID ser válido.

Atributos

Exemplos

O exemplo a seguir usa o CLSID do objeto Microsoft Word Application para recuperar um tipo COM que representa o aplicativo Microsoft Word. Em seguida, ele cria uma instância do tipo chamando o Activator.CreateInstance método e o fecha chamando o método Application.Quit . Uma exceção será gerada se ocorrer um erro ao carregar o tipo.

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

Comentários

O GetTypeFromCLSID método dá suporte ao acesso de associação tardia a objetos COM não gerenciados de aplicativos .NET Framework quando você conhece o CLSID (identificador de classe) do objeto COM. O identificador de classe para classes COM é definido na chave HKEY_CLASSES_ROOT\CLSID do registro. Você pode recuperar o valor da IsCOMObject propriedade para determinar se o tipo retornado por esse método é um objeto COM.

Dica

Você pode chamar o GetTypeFromProgID método para acesso de associação tardia a objetos COM cujo identificador programático (ProgID) você conhece.

Criar uma instância de um objeto COM não gerenciado de seu CLSID é um processo de duas etapas:

  1. Obtenha um Type objeto que representa o __ComObject que corresponde ao CLSID chamando o GetTypeFromCLSID método .

  2. Chame o Activator.CreateInstance(Type) método para instanciar o objeto COM.

Consulte o exemplo para obter uma ilustração.

Exceções como OutOfMemoryException serão geradas ao especificar true para throwOnError, mas não falharão para CLSIDs não registrados.

Notas aos Chamadores

Esse método destina-se ao uso ao trabalhar com objetos COM, não com objetos .NET Framework. Todos os objetos gerenciados, incluindo aqueles visíveis para COM (ou seja, seu ComVisibleAttribute atributo é true) têm um GUID retornado pela GUID propriedade . Embora o método retorne um Type objeto que corresponde ao GUID para objetos .NET Framework, você não pode usar esse Type objeto para criar uma instância de tipo chamando o CreateInstance(Type) método , como mostra o exemplo a seguir.

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

Em vez disso, o GetTypeFromCLSID(Guid, String, Boolean) deve ser usado apenas para recuperar o GUID de um objeto COM não gerenciado e o objeto resultante Type que é passado para o CreateInstance(Type) método deve representar um objeto COM não gerenciado.

Aplica-se a

.NET 9 e outras versões
Produto Versões
.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)

Origem:
Type.cs
Origem:
Type.cs
Origem:
Type.cs

Obtém o tipo associado ao CLSID (identificador de classe) especificado do servidor especificado.

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

Parâmetros

clsid
Guid

O CLSID do tipo a ser obtido.

server
String

O servidor do qual carregar o tipo. Caso o nome do servidor seja null, este método retorna automaticamente para o computador local.

Retornos

System.__ComObject independentemente do CLSID ser válido.

Atributos

Exemplos

O exemplo a seguir usa o CLSID do objeto Microsoft Word Application para recuperar um tipo COM que representa o aplicativo Microsoft Word de um servidor chamado computer17.central.contoso.com. Em seguida, ele cria uma instância do tipo chamando o Activator.CreateInstance método e o fecha chamando o método 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

Comentários

O GetTypeFromCLSID método dá suporte ao acesso de associação tardia a objetos COM não gerenciados de aplicativos .NET Framework quando você conhece o CLSID (identificador de classe) do objeto COM. O identificador de classe para classes COM é definido na chave HKEY_CLASSES_ROOT\CLSID do registro. Você pode recuperar o valor da IsCOMObject propriedade para determinar se o tipo retornado por esse método é um objeto COM.

Dica

Você pode chamar o GetTypeFromProgID método para acesso de associação tardia a objetos COM cujo identificador programático (ProgID) você conhece.

Criar uma instância de um objeto COM não gerenciado de seu CLSID é um processo de duas etapas:

  1. Obtenha um Type objeto que representa o __ComObject que corresponde ao CLSID chamando o GetTypeFromCLSID método .

  2. Chame o Activator.CreateInstance(Type) método para instanciar o objeto COM.

Notas aos Chamadores

Esse método destina-se ao uso ao trabalhar com objetos COM, não com objetos .NET Framework. Todos os objetos gerenciados, incluindo aqueles visíveis para COM (ou seja, seu ComVisibleAttribute atributo é true) têm um GUID retornado pela GUID propriedade . Embora o método retorne um Type objeto que corresponde ao GUID para objetos .NET Framework, você não pode usar esse Type objeto para criar uma instância de tipo chamando o CreateInstance(Type) método , como mostra o exemplo a seguir.

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

Em vez disso, o GetTypeFromCLSID(Guid, String, Boolean) deve ser usado apenas para recuperar o GUID de um objeto COM não gerenciado e o objeto resultante Type que é passado para o CreateInstance(Type) método deve representar um objeto COM não gerenciado.

Aplica-se a

.NET 9 e outras versões
Produto Versões
.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)

Origem:
Type.cs
Origem:
Type.cs
Origem:
Type.cs

Obtém o tipo associado ao CLSID (identificador de classe) especificado do servidor especificado, determinando se uma exceção deverá ser gerada se ocorrer um erro durante o carregamento do tipo.

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

Parâmetros

clsid
Guid

O CLSID do tipo a ser obtido.

server
String

O servidor do qual carregar o tipo. Caso o nome do servidor seja null, este método retorna automaticamente para o computador local.

throwOnError
Boolean

true para gerar qualquer exceção que ocorra.

- ou -

false para ignorar qualquer exceção que ocorra.

Retornos

System.__ComObject independentemente do CLSID ser válido.

Atributos

Exemplos

O exemplo a seguir usa o CLSID do objeto Microsoft Word Application para recuperar um tipo COM que representa o aplicativo Microsoft Word de um servidor chamado computer17.central.contoso.com. Em seguida, ele cria uma instância do tipo chamando o Activator.CreateInstance método e o fecha chamando o método Application.Quit . Uma exceção será gerada se ocorrer um erro ao carregar o tipo.

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

Comentários

O GetTypeFromCLSID método dá suporte ao acesso de associação tardia a objetos COM não gerenciados de aplicativos .NET Framework quando você conhece o CLSID (identificador de classe) do objeto COM. O identificador de classe para classes COM é definido na chave HKEY_CLASSES_ROOT\CLSID do registro. Você pode recuperar o valor da IsCOMObject propriedade para determinar se o tipo retornado por esse método é um objeto COM.

Dica

Você pode chamar o GetTypeFromProgID método para acesso de associação tardia a objetos COM cujo identificador programático (ProgID) você conhece.

Criar uma instância de um objeto COM não gerenciado de seu CLSID é um processo de duas etapas:

  1. Obtenha um Type objeto que representa o __ComObject que corresponde ao CLSID chamando o GetTypeFromCLSID método .

  2. Chame o Activator.CreateInstance(Type) método para instanciar o objeto COM.

Exceções como OutOfMemoryException serão geradas ao especificar true para throwOnError, mas não falharão para CLSIDs não registrados.

Notas aos Chamadores

Esse método destina-se ao uso ao trabalhar com objetos COM, não com objetos .NET Framework. Todos os objetos gerenciados, incluindo aqueles visíveis para COM (ou seja, seu ComVisibleAttribute atributo é true) têm um GUID retornado pela GUID propriedade . Embora o GetTypeFromCLSID(Guid, String, Boolean) método retorne um Type objeto que corresponde ao GUID de um objeto gerenciado específico, você não pode usar esse Type objeto para criar uma instância de tipo chamando o CreateInstance(Type) método , como mostra o exemplo a seguir.

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

Em vez disso, o GetTypeFromCLSID(Guid, String, Boolean) deve ser usado apenas para recuperar o GUID de um objeto COM não gerenciado e o objeto resultante Type que é passado para o CreateInstance(Type) método deve representar um objeto COM não gerenciado.

Aplica-se a

.NET 9 e outras versões
Produto Versões
.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