Leer en inglés

Compartir a través de


Type.GetTypeFromCLSID Método

Definición

Obtiene el tipo asociado al identificador de clase especificado (CLSID).

Sobrecargas

GetTypeFromCLSID(Guid)

Obtiene el tipo asociado al identificador de clase especificado (CLSID).

GetTypeFromCLSID(Guid, Boolean)

Obtiene el tipo asociado al identificador de clase (CLSID) especificado, que debe indicar si se producirá una excepción en caso de que se produzca un error al cargar el tipo.

GetTypeFromCLSID(Guid, String)

Obtiene el tipo asociado al identificador de clase (CLSID) especificado desde el servidor especificado.

GetTypeFromCLSID(Guid, String, Boolean)

Obtiene el tipo asociado al identificador de clase (CLSID) indicado desde el servidor especificado y debe indicarse si se producirá una excepción en caso de que se produzca un error al cargar el tipo.

GetTypeFromCLSID(Guid)

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

Obtiene el tipo asociado al identificador de clase 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

Identificador CLSID del tipo que se va a obtener.

Devoluciones

System.__ComObject independientemente de que CLSID sea válido.

Atributos

Ejemplos

En el ejemplo siguiente se usa el CLSID del objeto Application de Microsoft Word para recuperar un tipo COM que representa la aplicación de Microsoft Word. A continuación, crea una instancia del tipo llamando al Activator.CreateInstance método y lo cierra llamando al 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

Comentarios

El GetTypeFromCLSID método admite el acceso enlazado en tiempo de ejecución a objetos COM no administrados desde aplicaciones de .NET Framework cuando conoce el identificador de clase (CLSID) del objeto COM. El identificador de clase de las clases COM se define en la clave HKEY_CLASSES_ROOT\CLSID del Registro. Puede recuperar el valor de la IsCOMObject propiedad para determinar si el tipo devuelto por este método es un objeto COM.

Sugerencia

Puede llamar al GetTypeFromProgID método para el acceso enlazado en tiempo de ejecución a objetos COM cuyo identificador de programación (ProgID) conoce.

Crear una instancia de un objeto COM no administrado a partir de su CLSID es un proceso de dos pasos:

  1. Obtenga un Type objeto que represente el__ComObject que corresponde al CLSID llamando al GetTypeFromCLSID método .

  2. Llame al Activator.CreateInstance(Type) método para crear una instancia del objeto COM.

Vea el ejemplo para obtener una ilustración.

La GetTypeFromCLSID(Guid) sobrecarga omite cualquier excepción que se pueda producir al crear instancias de un Type objeto basado en el clsid argumento . Tenga en cuenta que no se produce ninguna excepción si clsid no se encuentra en el Registro.

Notas a los autores de las llamadas

Este método está pensado para su uso al trabajar con objetos COM, no con objetos de .NET Framework. Todos los objetos administrados, incluidos los que son visibles para COM (es decir, su ComVisibleAttribute atributo es true) tienen un GUID devuelto por la GUID propiedad . Aunque el método devuelve un Type objeto que corresponde al GUID de los objetos de .NET Framework, no puede usar ese Type objeto para crear una instancia de tipo llamando al método , como se muestra en el CreateInstance(Type) ejemplo siguiente.

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

En su lugar, GetTypeFromCLSID(Guid, String, Boolean) solo se debe usar para recuperar el GUID de un objeto COM no administrado y el objeto resultante Type que se pasa al CreateInstance(Type) método debe representar un objeto COM no administrado.

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.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

Obtiene el tipo asociado al identificador de clase (CLSID) especificado, que debe indicar si se producirá una excepción en caso de que se produzca un error al cargar el 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

Identificador CLSID del tipo que se va a obtener.

throwOnError
Boolean

true para producir cualquier excepción que se genere.

O bien

false para pasar por alto cualquier excepción que se produzca.

Devoluciones

System.__ComObject independientemente de que CLSID sea válido.

Atributos

Ejemplos

En el ejemplo siguiente se usa el CLSID del objeto Application de Microsoft Word para recuperar un tipo COM que representa la aplicación de Microsoft Word. A continuación, crea una instancia del tipo llamando al Activator.CreateInstance método y lo cierra llamando al método Application.Quit . Se produce una excepción si se produce un error al cargar el 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

Comentarios

El GetTypeFromCLSID método admite el acceso enlazado en tiempo de ejecución a objetos COM no administrados desde aplicaciones de .NET Framework cuando conoce el identificador de clase (CLSID) del objeto COM. El identificador de clase de las clases COM se define en la clave HKEY_CLASSES_ROOT\CLSID del Registro. Puede recuperar el valor de la IsCOMObject propiedad para determinar si el tipo devuelto por este método es un objeto COM.

Sugerencia

Puede llamar al GetTypeFromProgID método para el acceso enlazado en tiempo de ejecución a objetos COM cuyo identificador de programación (ProgID) conoce.

Crear una instancia de un objeto COM no administrado a partir de su CLSID es un proceso de dos pasos:

  1. Obtenga un Type objeto que represente el __ComObject que corresponde al CLSID llamando al GetTypeFromCLSID método .

  2. Llame al Activator.CreateInstance(Type) método para crear una instancia del objeto COM.

Vea el ejemplo para obtener una ilustración.

Se producirán excepciones como OutOfMemoryException al especificar true para throwOnError, pero no se producirá un error en los CLSID no registrados.

Notas a los autores de las llamadas

Este método está pensado para su uso al trabajar con objetos COM, no con objetos de .NET Framework. Todos los objetos administrados, incluidos los que son visibles para COM (es decir, su ComVisibleAttribute atributo es true) tienen un GUID devuelto por la GUID propiedad . Aunque el método devuelve un Type objeto que corresponde al GUID de los objetos de .NET Framework, no puede usar ese Type objeto para crear una instancia de tipo llamando al método , como se muestra en el CreateInstance(Type) ejemplo siguiente.

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

En su lugar, GetTypeFromCLSID(Guid, String, Boolean) solo se debe usar para recuperar el GUID de un objeto COM no administrado y el objeto resultante Type que se pasa al CreateInstance(Type) método debe representar un objeto COM no administrado.

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.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

Obtiene el tipo asociado al identificador de clase (CLSID) especificado desde el 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

Identificador CLSID del tipo que se va a obtener.

server
String

Servidor desde el que se va a cargar el tipo. Si el nombre de servidor es null, el resultado que el método devuelve automáticamente es el equipo local.

Devoluciones

System.__ComObject independientemente de que CLSID sea válido.

Atributos

Ejemplos

En el ejemplo siguiente se usa el CLSID del objeto Application de Microsoft Word para recuperar un tipo COM que representa la aplicación de Microsoft Word de un servidor denominado computer17.central.contoso.com. A continuación, crea una instancia del tipo llamando al Activator.CreateInstance método y lo cierra llamando al 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

Comentarios

El GetTypeFromCLSID método admite el acceso enlazado en tiempo de ejecución a objetos COM no administrados desde aplicaciones de .NET Framework cuando conoce el identificador de clase (CLSID) del objeto COM. El identificador de clase de las clases COM se define en la clave HKEY_CLASSES_ROOT\CLSID del Registro. Puede recuperar el valor de la IsCOMObject propiedad para determinar si el tipo devuelto por este método es un objeto COM.

Sugerencia

Puede llamar al GetTypeFromProgID método para el acceso enlazado en tiempo de ejecución a objetos COM cuyo identificador de programación (ProgID) conoce.

Crear una instancia de un objeto COM no administrado a partir de su CLSID es un proceso de dos pasos:

  1. Obtenga un Type objeto que represente el __ComObject que corresponde al CLSID llamando al GetTypeFromCLSID método .

  2. Llame al Activator.CreateInstance(Type) método para crear una instancia del objeto COM.

Notas a los autores de las llamadas

Este método está pensado para su uso al trabajar con objetos COM, no con objetos de .NET Framework. Todos los objetos administrados, incluidos los que son visibles para COM (es decir, su ComVisibleAttribute atributo es true) tienen un GUID devuelto por la GUID propiedad . Aunque el método devuelve un Type objeto que corresponde al GUID de los objetos de .NET Framework, no puede usar ese Type objeto para crear una instancia de tipo llamando al método , como se muestra en el CreateInstance(Type) ejemplo siguiente.

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

En su lugar, GetTypeFromCLSID(Guid, String, Boolean) solo se debe usar para recuperar el GUID de un objeto COM no administrado y el objeto resultante Type que se pasa al CreateInstance(Type) método debe representar un objeto COM no administrado.

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.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

Obtiene el tipo asociado al identificador de clase (CLSID) indicado desde el servidor especificado y debe indicarse si se producirá una excepción en caso de que se produzca un error al cargar el 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

Identificador CLSID del tipo que se va a obtener.

server
String

Servidor desde el que se va a cargar el tipo. Si el nombre de servidor es null, el resultado que el método devuelve automáticamente es el equipo local.

throwOnError
Boolean

true para producir cualquier excepción que se genere.

O bien

false para pasar por alto cualquier excepción que se produzca.

Devoluciones

System.__ComObject independientemente de que CLSID sea válido.

Atributos

Ejemplos

En el ejemplo siguiente se usa el CLSID del objeto Application de Microsoft Word para recuperar un tipo COM que representa la aplicación de Microsoft Word de un servidor denominado computer17.central.contoso.com. A continuación, crea una instancia del tipo llamando al Activator.CreateInstance método y lo cierra llamando al método Application.Quit . Se produce una excepción si se produce un error al cargar el 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

Comentarios

El GetTypeFromCLSID método admite el acceso enlazado en tiempo de ejecución a objetos COM no administrados desde aplicaciones de .NET Framework cuando conoce el identificador de clase (CLSID) del objeto COM. El identificador de clase de las clases COM se define en la clave HKEY_CLASSES_ROOT\CLSID del Registro. Puede recuperar el valor de la IsCOMObject propiedad para determinar si el tipo devuelto por este método es un objeto COM.

Sugerencia

Puede llamar al GetTypeFromProgID método para el acceso enlazado en tiempo de ejecución a objetos COM cuyo identificador de programación (ProgID) conoce.

Crear una instancia de un objeto COM no administrado a partir de su CLSID es un proceso de dos pasos:

  1. Obtenga un Type objeto que represente el __ComObject que corresponde al CLSID llamando al GetTypeFromCLSID método .

  2. Llame al Activator.CreateInstance(Type) método para crear una instancia del objeto COM.

Se producirán excepciones como OutOfMemoryException al especificar true para throwOnError, pero no se producirá un error en los CLSID no registrados.

Notas a los autores de las llamadas

Este método está pensado para su uso al trabajar con objetos COM, no con objetos de .NET Framework. Todos los objetos administrados, incluidos los que son visibles para COM (es decir, su ComVisibleAttribute atributo es true) tienen un GUID devuelto por la GUID propiedad . Aunque el GetTypeFromCLSID(Guid, String, Boolean) método devuelve un Type objeto que corresponde al GUID de un objeto administrado determinado, no puede usar ese Type objeto para crear una instancia de tipo llamando al método , como se muestra en el CreateInstance(Type) ejemplo siguiente.

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

En su lugar, GetTypeFromCLSID(Guid, String, Boolean) solo se debe usar para recuperar el GUID de un objeto COM no administrado y el objeto resultante Type que se pasa al CreateInstance(Type) método debe representar un objeto COM no administrado.

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.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