Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Type.GetTypeFromCLSID (Guid)

 

Data di pubblicazione: ottobre 2016

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

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

public static Type GetTypeFromCLSID(
	Guid clsid
)

Parametri

clsid
Type: System.Guid

CLSID del tipo da ottenere.

Valore restituito

Type: System.Type

System.__ComObject indipendentemente dalla validità del CLSID.

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

System_CAPS_tipSuggerimento

È possibile chiamare il GetTypeFromProgID metodo per l'accesso ad associazione tardiva a COM il cui identificatore programmatico (ProgID) si è certi di oggetti.

Creazione di un oggetto COM non gestito dal relativo CLSID è un processo in due passaggi:

  1. Ottenere un Type oggetto che rappresenta il__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.

Il GetTypeFromCLSID(Guid) overload ignora qualsiasi eccezione che può verificarsi quando si crea un Type basato sul clsid argomento. Si noti che viene generata alcuna eccezione se clsid non viene trovato nel Registro di sistema.

Note per i chiamanti:

Questo metodo è destinato all'uso quando si lavora con gli oggetti COM, non con gli oggetti di .NET Framework. Tutti oggetti gestiti, inclusi quelli che sono visibili a COM (vale a dire i ComVisibleAttribute attributo è true) un GUID che viene restituito dal GUID proprietà. Anche se il metodo restituisce un Type oggetto che corrisponde al GUID di .NET Framework gli oggetti, non è possibile utilizzare Type oggetto per creare un'istanza del tipo chiamando il Activator.CreateInstance metodo, come illustrato nell'esempio seguente.

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, il GetTypeFromCLSID deve essere utilizzata solo per recuperare il GUID di un oggetto COM non gestito e il valore risultanteType oggetto passato per il Activator.CreateInstancemethod deve rappresentare un oggetto COM non gestito.

Nell'esempio seguente usa il CLSID di Microsoft Word Application object per recuperare un tipo COM che rappresenta l'applicazione di Microsoft Word. Quindi creata un'istanza del tipo chiamando il Activator.CreateInstance (metodo) e chiude chiamando il Application.Quit (metodo).

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

.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Torna all'inizio
Mostra: