Type.GetTypeFromCLSID Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém o tipo associado ao identificador de classe especificado (CLSID).
Sobrecargas
GetTypeFromCLSID(Guid) |
Obtém o tipo associado ao identificador de classe especificado (CLSID). |
GetTypeFromCLSID(Guid, Boolean) |
Obtém o tipo associado ao CLSID (identificador de classe) especificado, especificando se deverá gerar uma exceção se ocorrer um erro ao carregar o tipo. |
GetTypeFromCLSID(Guid, String) |
Obtém o tipo associado ao CLSID (identificador de classe) especificado do servidor especificado. |
GetTypeFromCLSID(Guid, String, Boolean) |
Obtém o tipo associado ao CLSID (identificador de classe) especificado do servidor especificado, determinando se uma exceção deverá ser gerada se ocorrer um erro durante o carregamento do tipo. |
GetTypeFromCLSID(Guid)
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
Obtém o tipo associado ao identificador de classe especificado (CLSID).
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
Parâmetros
- clsid
- Guid
O CLSID do tipo a ser obtido.
Retornos
System.__ComObject
independentemente do CLSID ser válido.
- Atributos
Exemplos
O exemplo a seguir usa o CLSID do objeto Microsoft Word Application para recuperar um tipo COM que representa o aplicativo Microsoft Word. Em seguida, ele cria uma instância do tipo chamando o Activator.CreateInstance método e o fecha chamando o método Application.Quit .
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
Comentários
O GetTypeFromCLSID método dá suporte ao acesso de associação tardia a objetos COM não gerenciados de aplicativos .NET Framework quando você conhece o CLSID (identificador de classe) do objeto COM. O identificador de classe para classes COM é definido na chave HKEY_CLASSES_ROOT\CLSID do registro. Você pode recuperar o valor da IsCOMObject propriedade para determinar se o tipo retornado por esse método é um objeto COM.
Dica
Você pode chamar o GetTypeFromProgID método para acesso de associação tardia a objetos COM cujo identificador programático (ProgID) você conhece.
Criar uma instância de um objeto COM não gerenciado de seu CLSID é um processo de duas etapas:
Obtenha um Type objeto que representa o
__ComObject
que corresponde ao CLSID chamando o GetTypeFromCLSID método .Chame o Activator.CreateInstance(Type) método para instanciar o objeto COM.
Consulte o exemplo para obter uma ilustração.
A GetTypeFromCLSID(Guid) sobrecarga ignora qualquer exceção que possa ocorrer ao instanciar um Type objeto com base no clsid
argumento . Observe que nenhuma exceção será gerada se clsid
não for encontrada no registro.
Notas aos Chamadores
Esse método destina-se ao uso ao trabalhar com objetos COM, não com objetos .NET Framework. Todos os objetos gerenciados, incluindo aqueles visíveis para COM (ou seja, seu ComVisibleAttribute atributo é true
) têm um GUID retornado pela GUID propriedade . Embora o método retorne um Type objeto que corresponde ao GUID para objetos .NET Framework, você não pode usar esse Type objeto para criar uma instância de tipo chamando o CreateInstance(Type) método , como mostra o exemplo a seguir.
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)).
Em vez disso, o GetTypeFromCLSID(Guid, String, Boolean) deve ser usado apenas para recuperar o GUID de um objeto COM não gerenciado e o objeto resultante Type que é passado para o CreateInstance(Type) método deve representar um objeto COM não gerenciado.
Aplica-se a
GetTypeFromCLSID(Guid, Boolean)
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
Obtém o tipo associado ao CLSID (identificador de classe) especificado, especificando se deverá gerar uma exceção se ocorrer um erro ao carregar o tipo.
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
Parâmetros
- clsid
- Guid
O CLSID do tipo a ser obtido.
- throwOnError
- Boolean
true
para gerar qualquer exceção que ocorra.
- ou -
false
para ignorar qualquer exceção que ocorra.
Retornos
System.__ComObject
independentemente do CLSID ser válido.
- Atributos
Exemplos
O exemplo a seguir usa o CLSID do objeto Microsoft Word Application para recuperar um tipo COM que representa o aplicativo Microsoft Word. Em seguida, ele cria uma instância do tipo chamando o Activator.CreateInstance método e o fecha chamando o método Application.Quit . Uma exceção será gerada se ocorrer um erro ao carregar o tipo.
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
Comentários
O GetTypeFromCLSID método dá suporte ao acesso de associação tardia a objetos COM não gerenciados de aplicativos .NET Framework quando você conhece o CLSID (identificador de classe) do objeto COM. O identificador de classe para classes COM é definido na chave HKEY_CLASSES_ROOT\CLSID do registro. Você pode recuperar o valor da IsCOMObject propriedade para determinar se o tipo retornado por esse método é um objeto COM.
Dica
Você pode chamar o GetTypeFromProgID método para acesso de associação tardia a objetos COM cujo identificador programático (ProgID) você conhece.
Criar uma instância de um objeto COM não gerenciado de seu CLSID é um processo de duas etapas:
Obtenha um Type objeto que representa o
__ComObject
que corresponde ao CLSID chamando o GetTypeFromCLSID método .Chame o Activator.CreateInstance(Type) método para instanciar o objeto COM.
Consulte o exemplo para obter uma ilustração.
Exceções como OutOfMemoryException serão geradas ao especificar true
para throwOnError
, mas não falharão para CLSIDs não registrados.
Notas aos Chamadores
Esse método destina-se ao uso ao trabalhar com objetos COM, não com objetos .NET Framework. Todos os objetos gerenciados, incluindo aqueles visíveis para COM (ou seja, seu ComVisibleAttribute atributo é true
) têm um GUID retornado pela GUID propriedade . Embora o método retorne um Type objeto que corresponde ao GUID para objetos .NET Framework, você não pode usar esse Type objeto para criar uma instância de tipo chamando o CreateInstance(Type) método , como mostra o exemplo a seguir.
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)).
Em vez disso, o GetTypeFromCLSID(Guid, String, Boolean) deve ser usado apenas para recuperar o GUID de um objeto COM não gerenciado e o objeto resultante Type que é passado para o CreateInstance(Type) método deve representar um objeto COM não gerenciado.
Aplica-se a
GetTypeFromCLSID(Guid, String)
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
Obtém o tipo associado ao CLSID (identificador de classe) especificado do servidor especificado.
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
Parâmetros
- clsid
- Guid
O CLSID do tipo a ser obtido.
- server
- String
O servidor do qual carregar o tipo. Caso o nome do servidor seja null
, este método retorna automaticamente para o computador local.
Retornos
System.__ComObject
independentemente do CLSID ser válido.
- Atributos
Exemplos
O exemplo a seguir usa o CLSID do objeto Microsoft Word Application para recuperar um tipo COM que representa o aplicativo Microsoft Word de um servidor chamado computer17.central.contoso.com. Em seguida, ele cria uma instância do tipo chamando o Activator.CreateInstance método e o fecha chamando o método Application.Quit .
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
Comentários
O GetTypeFromCLSID método dá suporte ao acesso de associação tardia a objetos COM não gerenciados de aplicativos .NET Framework quando você conhece o CLSID (identificador de classe) do objeto COM. O identificador de classe para classes COM é definido na chave HKEY_CLASSES_ROOT\CLSID do registro. Você pode recuperar o valor da IsCOMObject propriedade para determinar se o tipo retornado por esse método é um objeto COM.
Dica
Você pode chamar o GetTypeFromProgID método para acesso de associação tardia a objetos COM cujo identificador programático (ProgID) você conhece.
Criar uma instância de um objeto COM não gerenciado de seu CLSID é um processo de duas etapas:
Obtenha um Type objeto que representa o
__ComObject
que corresponde ao CLSID chamando o GetTypeFromCLSID método .Chame o Activator.CreateInstance(Type) método para instanciar o objeto COM.
Notas aos Chamadores
Esse método destina-se ao uso ao trabalhar com objetos COM, não com objetos .NET Framework. Todos os objetos gerenciados, incluindo aqueles visíveis para COM (ou seja, seu ComVisibleAttribute atributo é true
) têm um GUID retornado pela GUID propriedade . Embora o método retorne um Type objeto que corresponde ao GUID para objetos .NET Framework, você não pode usar esse Type objeto para criar uma instância de tipo chamando o CreateInstance(Type) método , como mostra o exemplo a seguir.
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)).
Em vez disso, o GetTypeFromCLSID(Guid, String, Boolean) deve ser usado apenas para recuperar o GUID de um objeto COM não gerenciado e o objeto resultante Type que é passado para o CreateInstance(Type) método deve representar um objeto COM não gerenciado.
Aplica-se a
GetTypeFromCLSID(Guid, String, Boolean)
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
Obtém o tipo associado ao CLSID (identificador de classe) especificado do servidor especificado, determinando se uma exceção deverá ser gerada se ocorrer um erro durante o carregamento do tipo.
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
Parâmetros
- clsid
- Guid
O CLSID do tipo a ser obtido.
- server
- String
O servidor do qual carregar o tipo. Caso o nome do servidor seja null
, este método retorna automaticamente para o computador local.
- throwOnError
- Boolean
true
para gerar qualquer exceção que ocorra.
- ou -
false
para ignorar qualquer exceção que ocorra.
Retornos
System.__ComObject
independentemente do CLSID ser válido.
- Atributos
Exemplos
O exemplo a seguir usa o CLSID do objeto Microsoft Word Application para recuperar um tipo COM que representa o aplicativo Microsoft Word de um servidor chamado computer17.central.contoso.com. Em seguida, ele cria uma instância do tipo chamando o Activator.CreateInstance método e o fecha chamando o método Application.Quit . Uma exceção será gerada se ocorrer um erro ao carregar o tipo.
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
Comentários
O GetTypeFromCLSID método dá suporte ao acesso de associação tardia a objetos COM não gerenciados de aplicativos .NET Framework quando você conhece o CLSID (identificador de classe) do objeto COM. O identificador de classe para classes COM é definido na chave HKEY_CLASSES_ROOT\CLSID do registro. Você pode recuperar o valor da IsCOMObject propriedade para determinar se o tipo retornado por esse método é um objeto COM.
Dica
Você pode chamar o GetTypeFromProgID método para acesso de associação tardia a objetos COM cujo identificador programático (ProgID) você conhece.
Criar uma instância de um objeto COM não gerenciado de seu CLSID é um processo de duas etapas:
Obtenha um Type objeto que representa o
__ComObject
que corresponde ao CLSID chamando o GetTypeFromCLSID método .Chame o Activator.CreateInstance(Type) método para instanciar o objeto COM.
Exceções como OutOfMemoryException serão geradas ao especificar true
para throwOnError
, mas não falharão para CLSIDs não registrados.
Notas aos Chamadores
Esse método destina-se ao uso ao trabalhar com objetos COM, não com objetos .NET Framework. Todos os objetos gerenciados, incluindo aqueles visíveis para COM (ou seja, seu ComVisibleAttribute atributo é true
) têm um GUID retornado pela GUID propriedade . Embora o GetTypeFromCLSID(Guid, String, Boolean) método retorne um Type objeto que corresponde ao GUID de um objeto gerenciado específico, você não pode usar esse Type objeto para criar uma instância de tipo chamando o CreateInstance(Type) método , como mostra o exemplo a seguir.
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)).
Em vez disso, o GetTypeFromCLSID(Guid, String, Boolean) deve ser usado apenas para recuperar o GUID de um objeto COM não gerenciado e o objeto resultante Type que é passado para o CreateInstance(Type) método deve representar um objeto COM não gerenciado.