Type.GetTypeFromCLSID Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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).
public:
static Type ^ GetTypeFromCLSID(Guid clsid);
public static Type? GetTypeFromCLSID (Guid clsid);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid);
public static Type GetTypeFromCLSID (Guid clsid);
static member GetTypeFromCLSID : Guid -> Type
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetTypeFromCLSID : Guid -> Type
Public Shared Function GetTypeFromCLSID (clsid As Guid) As Type
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 .
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
open System
open System.Reflection
let [<Literal>] WORD_CLSID = "{000209FF-0000-0000-C000-000000000046}"
// Start an instance of the Word application.
let word = Type.GetTypeFromCLSID(Guid.Parse WORD_CLSID)
printfn $"Instantiated Type object from CLSID {WORD_CLSID}"
let wordObj = Activator.CreateInstance word
printfn $"Instantiated {wordObj.GetType().FullName}"
// Close Word.
word.InvokeMember("Quit", BindingFlags.InvokeMethod, null, wordObj, [| box 0; 0; false |]) |> ignore
// The example displays the following output:
// Instantiated Type object from CLSID {000209FF-0000-0000-C000-000000000046}
// Instantiated Microsoft.Office.Interop.Word.ApplicationClass
Imports System.Reflection
Imports System.Runtime.InteropServices
Module Example
Private Const WORD_CLSID As String = "{000209FF-0000-0000-C000-000000000046}"
Public Sub Main()
' Start an instance of the Word application.
Dim word As Type = Type.GetTypeFromCLSID(Guid.Parse(WORD_CLSID))
Console.WriteLine("Instantiated Type object from CLSID {0}",
WORD_CLSID)
Dim wordObj As Object = Activator.CreateInstance(word)
Console.WriteLine("Instantiated {0}",
wordObj.GetType().FullName)
' Close Word.
word.InvokeMember("Quit", BindingFlags.InvokeMethod, Nothing,
wordObj, New Object() { 0, 0, False } )
End Sub
End Module
' 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:
Ottiene un Type oggetto che rappresenta l'oggetto
__ComObject
che corrisponde al CLSID chiamando il GetTypeFromCLSID metodo .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.
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)).
open System
open System.Runtime.InteropServices
[<assembly: ComVisible true>]
do ()
// Define two classes, and assign one an explicit GUID.
[<Guid "d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4">]
type ExplicitGuid() = class end
type NoExplicitGuid() = class end
let explicitType = typeof<ExplicitGuid>
let explicitGuid = explicitType.GUID
// Get type of ExplicitGuid from its GUID.
let explicitCOM = Type.GetTypeFromCLSID explicitGuid
printfn $"Created {explicitCOM.Name} type from CLSID {explicitGuid}"
// Compare the two type objects.
printfn $"{explicitType.Name} and {explicitCOM.Name} equal: {explicitType.Equals explicitCOM}"
// Instantiate an ExplicitGuid object.
try
let obj = Activator.CreateInstance explicitCOM
printfn $"Instantiated a {obj.GetType().Name} object"
with :? COMException as e ->
printfn $"COM Exception:\n{e.Message}\n"
let notExplicit = typeof<NoExplicitGuid>
let notExplicitGuid = notExplicit.GUID
// Get type of ExplicitGuid from its GUID.
let notExplicitCOM = Type.GetTypeFromCLSID(notExplicitGuid)
printfn $"Created {notExplicitCOM.Name} type from CLSID {notExplicitGuid}"
// Compare the two type objects.
printfn $"{notExplicit.Name} and {notExplicitCOM.Name} equal: {notExplicit.Equals notExplicitCOM}"
// Instantiate an ExplicitGuid object.
try
let obj = Activator.CreateInstance notExplicitCOM
printfn $"Instantiated a {obj.GetType().Name} object"
with :? COMException as e ->
printfn $"COM Exception:\n{e.Message}\n"
// 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)).
Imports System.Runtime.InteropServices
<Assembly:ComVisible(True)>
' Define two classes, and assign one an explicit GUID.
<GuidAttribute("d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4")>
Public Class ExplicitGuid
End Class
Public Class NoExplicitGuid
End Class
Module Example
Public Sub Main()
Dim explicitType As Type = GetType(ExplicitGuid)
Dim explicitGuid As Guid = explicitType.GUID
' Get type of ExplicitGuid from its GUID.
Dim explicitCOM As Type = 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
Dim obj As Object = Activator.CreateInstance(explicitCOM)
Console.WriteLine("Instantiated a {0} object", obj.GetType().Name)
Catch e As COMException
Console.WriteLine("COM Exception:{1}{0}{1}", e.Message, vbCrLf)
End Try
Dim notExplicit As Type = GetType(NoExplicitGuid)
Dim notExplicitGuid As Guid = notExplicit.GUID
' Get type of ExplicitGuid from its GUID.
Dim notExplicitCOM As Type = 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
Dim obj As Object = Activator.CreateInstance(notExplicitCOM)
Console.WriteLine("Instantiated a {0} object", obj.GetType().Name)
Catch e As COMException
Console.WriteLine("COM Exception:{1}{0}{1}", e.Message, vbCrLf)
End Try
End Sub
End Module
' 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
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.
public:
static Type ^ GetTypeFromCLSID(Guid clsid, bool throwOnError);
public static Type? GetTypeFromCLSID (Guid clsid, bool throwOnError);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid, bool throwOnError);
public static Type GetTypeFromCLSID (Guid clsid, bool throwOnError);
static member GetTypeFromCLSID : Guid * bool -> Type
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetTypeFromCLSID : Guid * bool -> Type
Public Shared Function GetTypeFromCLSID (clsid As Guid, throwOnError As Boolean) As Type
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.
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
open System
open System.Reflection
let [<Literal>] WORD_CLSID = "{000209FF-0000-0000-C000-000000000046}"
try
// Start an instance of the Word application.
let word = Type.GetTypeFromCLSID(Guid.Parse WORD_CLSID, true)
printfn $"Instantiated Type object from CLSID {WORD_CLSID}"
let wordObj = Activator.CreateInstance word
printfn $"Instantiated {wordObj.GetType().FullName} from CLSID {WORD_CLSID}"
// Close Word.
word.InvokeMember("Quit", BindingFlags.InvokeMethod, null, wordObj, [| box 0; 0; false |] ) |> ignore
with _ ->
printfn $"Unable to instantiate an object for {WORD_CLSID}"
// The example displays the following output:
// Instantiated Type object from CLSID {000209FF-0000-0000-C000-000000000046}
// Instantiated Microsoft.Office.Interop.Word.ApplicationClass
Imports System.Reflection
Imports System.Runtime.InteropServices
Module Example
Private Const WORD_CLSID As String = "{000209FF-0000-0000-C000-000000000046}"
Public Sub Main()
' Start an instance of the Word application.
Try
Dim word As Type = Type.GetTypeFromCLSID(Guid.Parse(WORD_CLSID), True)
Console.WriteLine("Instantiated Type object from CLSID {0}",
WORD_CLSID)
Dim wordObj As Object = Activator.CreateInstance(word)
Console.WriteLine("Instantiated {0}",
wordObj.GetType().FullName)
' Close Word.
word.InvokeMember("Quit", BindingFlags.InvokeMethod, Nothing,
wordObj, New Object() { 0, 0, False } )
' The method can throw any of a number of unexpected exceptions.
Catch e As Exception
Console.WriteLine("Unable to instantiate an object for {0}", WORD_CLSID)
End Try
End Sub
End Module
' 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:
Ottiene un Type oggetto che rappresenta l'oggetto
__ComObject
che corrisponde al CLSID chiamando il GetTypeFromCLSID metodo .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.
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)).
open System
open System.Runtime.InteropServices
[<assembly: ComVisible true>]
do ()
// Define two classes, and assign one an explicit GUID.
[<Guid "d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4">]
type ExplicitGuid() = class end
type NoExplicitGuid() = class end
let explicitType = typeof<ExplicitGuid>
let explicitGuid = explicitType.GUID
// Get type of ExplicitGuid from its GUID.
let explicitCOM = Type.GetTypeFromCLSID explicitGuid
printfn $"Created {explicitCOM.Name} type from CLSID {explicitGuid}"
// Compare the two type objects.
printfn $"{explicitType.Name} and {explicitCOM.Name} equal: {explicitType.Equals explicitCOM}"
// Instantiate an ExplicitGuid object.
try
let obj = Activator.CreateInstance explicitCOM
printfn $"Instantiated a {obj.GetType().Name} object"
with :? COMException as e ->
printfn $"COM Exception:\n{e.Message}\n"
let notExplicit = typeof<NoExplicitGuid>
let notExplicitGuid = notExplicit.GUID
// Get type of ExplicitGuid from its GUID.
let notExplicitCOM = Type.GetTypeFromCLSID(notExplicitGuid)
printfn $"Created {notExplicitCOM.Name} type from CLSID {notExplicitGuid}"
// Compare the two type objects.
printfn $"{notExplicit.Name} and {notExplicitCOM.Name} equal: {notExplicit.Equals notExplicitCOM}"
// Instantiate an ExplicitGuid object.
try
let obj = Activator.CreateInstance notExplicitCOM
printfn $"Instantiated a {obj.GetType().Name} object"
with :? COMException as e ->
printfn $"COM Exception:\n{e.Message}\n"
// 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)).
Imports System.Runtime.InteropServices
<Assembly:ComVisible(True)>
' Define two classes, and assign one an explicit GUID.
<GuidAttribute("d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4")>
Public Class ExplicitGuid
End Class
Public Class NoExplicitGuid
End Class
Module Example
Public Sub Main()
Dim explicitType As Type = GetType(ExplicitGuid)
Dim explicitGuid As Guid = explicitType.GUID
' Get type of ExplicitGuid from its GUID.
Dim explicitCOM As Type = 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
Dim obj As Object = Activator.CreateInstance(explicitCOM)
Console.WriteLine("Instantiated a {0} object", obj.GetType().Name)
Catch e As COMException
Console.WriteLine("COM Exception:{1}{0}{1}", e.Message, vbCrLf)
End Try
Dim notExplicit As Type = GetType(NoExplicitGuid)
Dim notExplicitGuid As Guid = notExplicit.GUID
' Get type of ExplicitGuid from its GUID.
Dim notExplicitCOM As Type = 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
Dim obj As Object = Activator.CreateInstance(notExplicitCOM)
Console.WriteLine("Instantiated a {0} object", obj.GetType().Name)
Catch e As COMException
Console.WriteLine("COM Exception:{1}{0}{1}", e.Message, vbCrLf)
End Try
End Sub
End Module
' 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
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.
public:
static Type ^ GetTypeFromCLSID(Guid clsid, System::String ^ server);
public static Type? GetTypeFromCLSID (Guid clsid, string? server);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid, string? server);
public static Type GetTypeFromCLSID (Guid clsid, string server);
static member GetTypeFromCLSID : Guid * string -> Type
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetTypeFromCLSID : Guid * string -> Type
Public Shared Function GetTypeFromCLSID (clsid As Guid, server As String) As Type
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 .
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
open System
open System.Reflection
open System.Runtime.InteropServices
let [<Literal>] WORD_CLSID = "{000209FF-0000-0000-C000-000000000046}"
// Start an instance of the Word application.
let word = Type.GetTypeFromCLSID(Guid.Parse WORD_CLSID, "computer17.central.contoso.com")
printfn $"Instantiated Type object from CLSID {WORD_CLSID}"
try
let wordObj = Activator.CreateInstance word
printfn $"Instantiated {wordObj.GetType().FullName} from CLSID {WORD_CLSID}"
// Close Word.
word.InvokeMember("Quit", BindingFlags.InvokeMethod, null, wordObj, [| box 0; 0; false |] ) |> ignore
with :? COMException ->
printfn "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
Imports System.Reflection
Imports System.Runtime.InteropServices
Module Example
Private Const WORD_CLSID As String = "{000209FF-0000-0000-C000-000000000046}"
Public Sub Main()
' Start an instance of the Word application.
Dim word As Type = Type.GetTypeFromCLSID(Guid.Parse(WORD_CLSID), "computer17.central.contoso.com")
Console.WriteLine("Instantiated Type object from CLSID {0}",
WORD_CLSID)
Try
Dim wordObj As Object = Activator.CreateInstance(word)
Console.WriteLine("Instantiated {0}",
wordObj.GetType().FullName)
' Close Word.
word.InvokeMember("Quit", BindingFlags.InvokeMethod, Nothing,
wordObj, New Object() { 0, 0, False } )
Catch e As COMException
Console.WriteLine("Unable to instantiate object.")
End Try
End Sub
End Module
' 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:
Ottiene un Type oggetto che rappresenta l'oggetto
__ComObject
che corrisponde al CLSID chiamando il GetTypeFromCLSID metodo .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.
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)).
open System
open System.Runtime.InteropServices
[<assembly: ComVisible true>]
do ()
// Define two classes, and assign one an explicit GUID.
[<Guid "d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4">]
type ExplicitGuid() = class end
type NoExplicitGuid() = class end
let explicitType = typeof<ExplicitGuid>
let explicitGuid = explicitType.GUID
// Get type of ExplicitGuid from its GUID.
let explicitCOM = Type.GetTypeFromCLSID explicitGuid
printfn $"Created {explicitCOM.Name} type from CLSID {explicitGuid}"
// Compare the two type objects.
printfn $"{explicitType.Name} and {explicitCOM.Name} equal: {explicitType.Equals explicitCOM}"
// Instantiate an ExplicitGuid object.
try
let obj = Activator.CreateInstance explicitCOM
printfn $"Instantiated a {obj.GetType().Name} object"
with :? COMException as e ->
printfn $"COM Exception:\n{e.Message}\n"
let notExplicit = typeof<NoExplicitGuid>
let notExplicitGuid = notExplicit.GUID
// Get type of ExplicitGuid from its GUID.
let notExplicitCOM = Type.GetTypeFromCLSID(notExplicitGuid)
printfn $"Created {notExplicitCOM.Name} type from CLSID {notExplicitGuid}"
// Compare the two type objects.
printfn $"{notExplicit.Name} and {notExplicitCOM.Name} equal: {notExplicit.Equals notExplicitCOM}"
// Instantiate an ExplicitGuid object.
try
let obj = Activator.CreateInstance notExplicitCOM
printfn $"Instantiated a {obj.GetType().Name} object"
with :? COMException as e ->
printfn $"COM Exception:\n{e.Message}\n"
// 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)).
Imports System.Runtime.InteropServices
<Assembly:ComVisible(True)>
' Define two classes, and assign one an explicit GUID.
<GuidAttribute("d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4")>
Public Class ExplicitGuid
End Class
Public Class NoExplicitGuid
End Class
Module Example
Public Sub Main()
Dim explicitType As Type = GetType(ExplicitGuid)
Dim explicitGuid As Guid = explicitType.GUID
' Get type of ExplicitGuid from its GUID.
Dim explicitCOM As Type = 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
Dim obj As Object = Activator.CreateInstance(explicitCOM)
Console.WriteLine("Instantiated a {0} object", obj.GetType().Name)
Catch e As COMException
Console.WriteLine("COM Exception:{1}{0}{1}", e.Message, vbCrLf)
End Try
Dim notExplicit As Type = GetType(NoExplicitGuid)
Dim notExplicitGuid As Guid = notExplicit.GUID
' Get type of ExplicitGuid from its GUID.
Dim notExplicitCOM As Type = 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
Dim obj As Object = Activator.CreateInstance(notExplicitCOM)
Console.WriteLine("Instantiated a {0} object", obj.GetType().Name)
Catch e As COMException
Console.WriteLine("COM Exception:{1}{0}{1}", e.Message, vbCrLf)
End Try
End Sub
End Module
' 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
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.
public:
static Type ^ GetTypeFromCLSID(Guid clsid, System::String ^ server, bool throwOnError);
public static Type? GetTypeFromCLSID (Guid clsid, string? server, bool throwOnError);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid, string? server, bool throwOnError);
public static Type GetTypeFromCLSID (Guid clsid, string server, bool throwOnError);
static member GetTypeFromCLSID : Guid * string * bool -> Type
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetTypeFromCLSID : Guid * string * bool -> Type
Public Shared Function GetTypeFromCLSID (clsid As Guid, server As String, throwOnError As Boolean) As Type
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.
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
open System
open System.Reflection
let [<Literal>] WORD_CLSID = "{000209FF-0000-0000-C000-000000000046}"
try
// Start an instance of the Word application.
let word = Type.GetTypeFromCLSID(Guid.Parse WORD_CLSID, "computer17.central.contoso.com", true)
printfn $"Instantiated Type object from CLSID {WORD_CLSID}"
let wordObj = Activator.CreateInstance word
printfn $"Instantiated {wordObj.GetType().FullName} from CLSID {WORD_CLSID}"
// Close Word.
word.InvokeMember("Quit", BindingFlags.InvokeMethod, null, wordObj, [| box 0; 0; false |] ) |> ignore
// The method can throw any of a variety of exceptions.
with e ->
printfn $"{e.GetType().Name}: Unable to instantiate an object for {WORD_CLSID}"
// The example displays the following output:
// Instantiated Type object from CLSID {000209FF-0000-0000-C000-000000000046}
// Instantiated Microsoft.Office.Interop.Word.ApplicationClass
Imports System.Reflection
Imports System.Runtime.InteropServices
Module Example
Private Const WORD_CLSID As String = "{000209FF-0000-0000-C000-000000000046}"
Public Sub Main()
Try
' Start an instance of the Word application.
Dim word As Type = Type.GetTypeFromCLSID(Guid.Parse(WORD_CLSID),
"computer17.central.contoso.com",
True)
Console.WriteLine("Instantiated Type object from CLSID {0}",
WORD_CLSID)
Dim wordObj As Object = Activator.CreateInstance(word)
Console.WriteLine("Instantiated {0}",
wordObj.GetType().FullName)
' Close Word.
word.InvokeMember("Quit", BindingFlags.InvokeMethod, Nothing,
wordObj, New Object() { 0, 0, False } )
' The method can throw any of a variety of exceptions.
Catch e As Exception
Console.WriteLine("{0}: Unable to instantiate an object for {1}",
e.GetType().Name, WORD_CLSID)
End Try
End Sub
End Module
' 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:
Ottiene un Type oggetto che rappresenta l'oggetto
__ComObject
che corrisponde al CLSID chiamando il GetTypeFromCLSID metodo .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.
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)).
open System
open System.Runtime.InteropServices
[<assembly: ComVisible true>]
do ()
// Define two classes, and assign one an explicit GUID.
[<Guid "d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4">]
type ExplicitGuid() = class end
type NoExplicitGuid() = class end
let explicitType = typeof<ExplicitGuid>
let explicitGuid = explicitType.GUID
// Get type of ExplicitGuid from its GUID.
let explicitCOM = Type.GetTypeFromCLSID explicitGuid
printfn $"Created {explicitCOM.Name} type from CLSID {explicitGuid}"
// Compare the two type objects.
printfn $"{explicitType.Name} and {explicitCOM.Name} equal: {explicitType.Equals explicitCOM}"
// Instantiate an ExplicitGuid object.
try
let obj = Activator.CreateInstance explicitCOM
printfn $"Instantiated a {obj.GetType().Name} object"
with :? COMException as e ->
printfn $"COM Exception:\n{e.Message}\n"
let notExplicit = typeof<NoExplicitGuid>
let notExplicitGuid = notExplicit.GUID
// Get type of ExplicitGuid from its GUID.
let notExplicitCOM = Type.GetTypeFromCLSID(notExplicitGuid)
printfn $"Created {notExplicitCOM.Name} type from CLSID {notExplicitGuid}"
// Compare the two type objects.
printfn $"{notExplicit.Name} and {notExplicitCOM.Name} equal: {notExplicit.Equals notExplicitCOM}"
// Instantiate an ExplicitGuid object.
try
let obj = Activator.CreateInstance notExplicitCOM
printfn $"Instantiated a {obj.GetType().Name} object"
with :? COMException as e ->
printfn $"COM Exception:\n{e.Message}\n"
// 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)).
Imports System.Runtime.InteropServices
<Assembly:ComVisible(True)>
' Define two classes, and assign one an explicit GUID.
<GuidAttribute("d055cba3-1f83-4bd7-ba19-e22b1b8ec3c4")>
Public Class ExplicitGuid
End Class
Public Class NoExplicitGuid
End Class
Module Example
Public Sub Main()
Dim explicitType As Type = GetType(ExplicitGuid)
Dim explicitGuid As Guid = explicitType.GUID
' Get type of ExplicitGuid from its GUID.
Dim explicitCOM As Type = 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
Dim obj As Object = Activator.CreateInstance(explicitCOM)
Console.WriteLine("Instantiated a {0} object", obj.GetType().Name)
Catch e As COMException
Console.WriteLine("COM Exception:{1}{0}{1}", e.Message, vbCrLf)
End Try
Dim notExplicit As Type = GetType(NoExplicitGuid)
Dim notExplicitGuid As Guid = notExplicit.GUID
' Get type of ExplicitGuid from its GUID.
Dim notExplicitCOM As Type = 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
Dim obj As Object = Activator.CreateInstance(notExplicitCOM)
Console.WriteLine("Instantiated a {0} object", obj.GetType().Name)
Catch e As COMException
Console.WriteLine("COM Exception:{1}{0}{1}", e.Message, vbCrLf)
End Try
End Sub
End Module
' 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.