Leggi in inglese

Condividi tramite


Type.GetTypeFromCLSID Metodo

Definizione

Ottiene il tipo associato all'identificatore di classe specificato (CLSID).

Overload

GetTypeFromCLSID(Guid)

Ottiene il tipo associato all'identificatore di classe specificato (CLSID).

GetTypeFromCLSID(Guid, Boolean)

Ottiene il tipo associato all'identificatore di classe specificato (CLSID) e indica se generare un'eccezione qualora si verifichi un errore durante il caricamento del tipo.

GetTypeFromCLSID(Guid, String)

Ottiene il tipo associato all'identificatore di classe specificato (CLSID) dal server specificato.

GetTypeFromCLSID(Guid, String, Boolean)

Ottiene il tipo associato all'identificatore di classe specificato (CLSID) dal server specificato e indica se generare un'eccezione in caso di errore durante il caricamento del tipo.

GetTypeFromCLSID(Guid)

Origine:
Type.cs
Origine:
Type.cs
Origine:
Type.cs

Ottiene il tipo associato all'identificatore di classe specificato (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);

Parametri

clsid
Guid

CLSID del tipo da ottenere.

Restituisce

System.__ComObject indipendentemente dalla validità del CLSID.

Attributi

Esempio

Nell'esempio seguente viene utilizzato il CLSID dell'oggetto Application di Microsoft Word per recuperare un tipo COM che rappresenta l'applicazione Microsoft Word. Crea quindi un'istanza del tipo chiamando il Activator.CreateInstance metodo e la chiude chiamando il metodo 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

Commenti

Il GetTypeFromCLSID metodo supporta l'accesso con associazione tardiva agli oggetti COM non gestiti dalle app .NET Framework quando si conosce l'identificatore di classe (CLSID) dell'oggetto COM. L'identificatore di classe per le classi COM è definito nella chiave HKEY_CLASSES_ROOT\CLSID del Registro di sistema. È possibile recuperare il valore della IsCOMObject proprietà per determinare se il tipo restituito da questo metodo è un oggetto COM.

Suggerimento

È possibile chiamare il metodo per l'accesso GetTypeFromProgID con associazione tardiva agli oggetti COM di cui si conosce l'identificatore programmatico (ProgID).

La creazione di un'istanza di un oggetto COM non gestito dal relativo CLSID è un processo in due passaggi:

  1. Ottiene un Type oggetto che rappresenta l'oggetto__ComObject che corrisponde al CLSID chiamando il GetTypeFromCLSID metodo .

  2. Chiamare il Activator.CreateInstance(Type) metodo per creare un'istanza dell'oggetto COM.

Vedere l'esempio per un'illustrazione.

L'overload GetTypeFromCLSID(Guid) ignora qualsiasi eccezione che può verificarsi durante la creazione di un'istanza di un Type oggetto in base all'argomento clsid . Si noti che non viene generata alcuna eccezione se clsid non viene trovata nel Registro di sistema.

Note per i chiamanti

Questo metodo è destinato all'uso quando si usano oggetti COM, non con oggetti .NET Framework. Tutti gli oggetti gestiti, inclusi quelli visibili a COM , ovvero il relativo ComVisibleAttribute attributo è true, hanno un GUID restituito dalla GUID proprietà . Anche se il metodo restituisce un Type oggetto che corrisponde al GUID per gli oggetti .NET Framework, non è possibile usare tale Type oggetto per creare un'istanza di tipo chiamando il CreateInstance(Type) metodo , come illustrato nell'esempio seguente.

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

Al contrario, GetTypeFromCLSID(Guid, String, Boolean) deve essere utilizzato solo per recuperare il GUID di un oggetto COM non gestito e l'oggetto risultante Type passato al CreateInstance(Type) metodo deve rappresentare un oggetto COM non gestito.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.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)

Origine:
Type.cs
Origine:
Type.cs
Origine:
Type.cs

Ottiene il tipo associato all'identificatore di classe specificato (CLSID) e indica se generare un'eccezione qualora si verifichi un errore durante il caricamento del 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);

Parametri

clsid
Guid

CLSID del tipo da ottenere.

throwOnError
Boolean

true per generare qualsiasi eccezione si verifichi.

-oppure-

false per ignorare qualsiasi eccezione si verifichi.

Restituisce

System.__ComObject indipendentemente dalla validità del CLSID.

Attributi

Esempio

Nell'esempio seguente viene utilizzato il CLSID dell'oggetto Application di Microsoft Word per recuperare un tipo COM che rappresenta l'applicazione Microsoft Word. Crea quindi un'istanza del tipo chiamando il Activator.CreateInstance metodo e la chiude chiamando il metodo Application.Quit . Viene generata un'eccezione se si verifica un errore durante il caricamento del 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

Commenti

Il GetTypeFromCLSID metodo supporta l'accesso con associazione tardiva agli oggetti COM non gestiti dalle app .NET Framework quando si conosce l'identificatore di classe (CLSID) dell'oggetto COM. L'identificatore di classe per le classi COM è definito nella chiave HKEY_CLASSES_ROOT\CLSID del Registro di sistema. È possibile recuperare il valore della IsCOMObject proprietà per determinare se il tipo restituito da questo metodo è un oggetto COM.

Suggerimento

È possibile chiamare il metodo per l'accesso GetTypeFromProgID con associazione tardiva agli oggetti COM di cui si conosce l'identificatore programmatico (ProgID).

La creazione di un'istanza di un oggetto COM non gestito dal relativo CLSID è un processo in due passaggi:

  1. Ottiene un Type oggetto che rappresenta l'oggetto __ComObject che corrisponde al CLSID chiamando il GetTypeFromCLSID metodo .

  2. Chiamare il Activator.CreateInstance(Type) metodo per creare un'istanza dell'oggetto COM.

Vedere l'esempio per un'illustrazione.

Le eccezioni, OutOfMemoryException ad esempio, verranno generate quando si specifica true per throwOnError, ma non avranno esito negativo per i CLSID non registrati.

Note per i chiamanti

Questo metodo è destinato all'uso quando si usano oggetti COM, non con oggetti .NET Framework. Tutti gli oggetti gestiti, inclusi quelli visibili a COM , ovvero il relativo ComVisibleAttribute attributo è true, hanno un GUID restituito dalla GUID proprietà . Anche se il metodo restituisce un Type oggetto che corrisponde al GUID per gli oggetti .NET Framework, non è possibile usare tale Type oggetto per creare un'istanza di tipo chiamando il CreateInstance(Type) metodo , come illustrato nell'esempio seguente.

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

Al contrario, GetTypeFromCLSID(Guid, String, Boolean) deve essere utilizzato solo per recuperare il GUID di un oggetto COM non gestito e l'oggetto risultante Type passato al CreateInstance(Type) metodo deve rappresentare un oggetto COM non gestito.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.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)

Origine:
Type.cs
Origine:
Type.cs
Origine:
Type.cs

Ottiene il tipo associato all'identificatore di classe specificato (CLSID) dal server specificato.

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

Parametri

clsid
Guid

CLSID del tipo da ottenere.

server
String

Server da cui caricare il tipo. Se il nome del server è null, il metodo verrà automaticamente ripristinato sul computer locale.

Restituisce

System.__ComObject indipendentemente dalla validità del CLSID.

Attributi

Esempio

Nell'esempio seguente viene utilizzato il CLSID dell'oggetto Application di Microsoft Word per recuperare un tipo COM che rappresenta l'applicazione Microsoft Word da un server denominato computer17.central.contoso.com. Crea quindi un'istanza del tipo chiamando il Activator.CreateInstance metodo e la chiude chiamando il metodo 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

Commenti

Il GetTypeFromCLSID metodo supporta l'accesso con associazione tardiva agli oggetti COM non gestiti dalle app .NET Framework quando si conosce l'identificatore di classe (CLSID) dell'oggetto COM. L'identificatore di classe per le classi COM è definito nella chiave HKEY_CLASSES_ROOT\CLSID del Registro di sistema. È possibile recuperare il valore della IsCOMObject proprietà per determinare se il tipo restituito da questo metodo è un oggetto COM.

Suggerimento

È possibile chiamare il metodo per l'accesso GetTypeFromProgID con associazione tardiva agli oggetti COM di cui si conosce l'identificatore programmatico (ProgID).

La creazione di un'istanza di un oggetto COM non gestito dal relativo CLSID è un processo in due passaggi:

  1. Ottiene un Type oggetto che rappresenta l'oggetto __ComObject che corrisponde al CLSID chiamando il GetTypeFromCLSID metodo .

  2. Chiamare il Activator.CreateInstance(Type) metodo per creare un'istanza dell'oggetto COM.

Note per i chiamanti

Questo metodo è destinato all'uso quando si usano oggetti COM, non con oggetti .NET Framework. Tutti gli oggetti gestiti, inclusi quelli visibili a COM , ovvero il relativo ComVisibleAttribute attributo è true, hanno un GUID restituito dalla GUID proprietà . Anche se il metodo restituisce un Type oggetto che corrisponde al GUID per gli oggetti .NET Framework, non è possibile usare tale Type oggetto per creare un'istanza di tipo chiamando il CreateInstance(Type) metodo , come illustrato nell'esempio seguente.

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

Al contrario, GetTypeFromCLSID(Guid, String, Boolean) deve essere utilizzato solo per recuperare il GUID di un oggetto COM non gestito e l'oggetto risultante Type passato al CreateInstance(Type) metodo deve rappresentare un oggetto COM non gestito.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.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)

Origine:
Type.cs
Origine:
Type.cs
Origine:
Type.cs

Ottiene il tipo associato all'identificatore di classe specificato (CLSID) dal server specificato e indica se generare un'eccezione in caso di errore durante il caricamento del 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);

Parametri

clsid
Guid

CLSID del tipo da ottenere.

server
String

Server da cui caricare il tipo. Se il nome del server è null, il metodo verrà automaticamente ripristinato sul computer locale.

throwOnError
Boolean

true per generare qualsiasi eccezione si verifichi.

-oppure-

false per ignorare qualsiasi eccezione si verifichi.

Restituisce

System.__ComObject indipendentemente dalla validità del CLSID.

Attributi

Esempio

Nell'esempio seguente viene utilizzato il CLSID dell'oggetto Application di Microsoft Word per recuperare un tipo COM che rappresenta l'applicazione Microsoft Word da un server denominato computer17.central.contoso.com. Crea quindi un'istanza del tipo chiamando il Activator.CreateInstance metodo e la chiude chiamando il metodo Application.Quit . Viene generata un'eccezione se si verifica un errore durante il caricamento del 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

Commenti

Il GetTypeFromCLSID metodo supporta l'accesso con associazione tardiva agli oggetti COM non gestiti dalle app .NET Framework quando si conosce l'identificatore di classe (CLSID) dell'oggetto COM. L'identificatore di classe per le classi COM è definito nella chiave HKEY_CLASSES_ROOT\CLSID del Registro di sistema. È possibile recuperare il valore della IsCOMObject proprietà per determinare se il tipo restituito da questo metodo è un oggetto COM.

Suggerimento

È possibile chiamare il metodo per l'accesso GetTypeFromProgID con associazione tardiva agli oggetti COM di cui si conosce l'identificatore programmatico (ProgID).

La creazione di un'istanza di un oggetto COM non gestito dal relativo CLSID è un processo in due passaggi:

  1. Ottiene un Type oggetto che rappresenta l'oggetto __ComObject che corrisponde al CLSID chiamando il GetTypeFromCLSID metodo .

  2. Chiamare il Activator.CreateInstance(Type) metodo per creare un'istanza dell'oggetto COM.

Le eccezioni, OutOfMemoryException ad esempio, verranno generate quando si specifica true per throwOnError, ma non avranno esito negativo per i CLSID non registrati.

Note per i chiamanti

Questo metodo è destinato all'uso quando si usano oggetti COM, non con oggetti .NET Framework. Tutti gli oggetti gestiti, inclusi quelli visibili a COM , ovvero il relativo ComVisibleAttribute attributo è true, hanno un GUID restituito dalla GUID proprietà . Anche se il GetTypeFromCLSID(Guid, String, Boolean) metodo restituisce un Type oggetto che corrisponde al GUID per un oggetto gestito specifico, non è possibile usare tale Type oggetto per creare un'istanza di tipo chiamando il CreateInstance(Type) metodo , come illustrato nell'esempio seguente.

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

Al contrario, GetTypeFromCLSID(Guid, String, Boolean) deve essere utilizzato solo per recuperare il GUID di un oggetto COM non gestito e l'oggetto risultante Type passato al CreateInstance(Type) metodo deve rappresentare un oggetto COM non gestito.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.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