Type.GetTypeFromCLSID Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá typ přidružený k zadanému identifikátoru třídy (CLSID).
Přetížení
GetTypeFromCLSID(Guid) |
Získá typ přidružený k identifikátoru zadané třídy (CLSID). |
GetTypeFromCLSID(Guid, Boolean) |
Získá typ přidružený k identifikátoru zadané třídy (CLSID), určující, zda má být vyvolána výjimka, pokud dojde k chybě při načítání typu. |
GetTypeFromCLSID(Guid, String) |
Získá typ přidružený k identifikátoru zadané třídy (CLSID) ze zadaného serveru. |
GetTypeFromCLSID(Guid, String, Boolean) |
Získá typ přidružený k identifikátoru zadané třídy (CLSID) ze zadaného serveru a určuje, zda má být vyvolána výjimka, pokud dojde k chybě při načítání typu. |
GetTypeFromCLSID(Guid)
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
Získá typ přidružený k identifikátoru zadané třídy (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
Parametry
- clsid
- Guid
Identifikátor CLSID typu, který má být získán.
Návraty
System.__ComObject
bez ohledu na to, zda je identifikátor CLSID platný.
- Atributy
Příklady
Následující příklad používá CLSID objektu aplikace Microsoft Word k načtení typu com, který představuje aplikaci Microsoft Word. Poté vytvoří instanci typu voláním Activator.CreateInstance metody a zavře ji voláním metody 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
Poznámky
Metoda GetTypeFromCLSID podporuje pozdní přístup k nespravovaným objektům COM z aplikací .NET Framework, pokud znáte identifikátor třídy objektu COM (CLSID). Identifikátor třídy modelu COM je definován v klíči HKEY_CLASSES_ROOT\CLSID registru. Můžete načíst hodnotu IsCOMObject vlastnosti určit, zda typ vrácený touto metodou je objekt COM.
Tip
Můžete volat metodu GetTypeFromProgID pro pozdní přístup k objektům COM, jejichž programový identifikátor (ProgID) znáte.
Vytvoření instance nespravovaného objektu COM z jeho IDENTIFIKÁTORu CLSID je dvoustupňový proces:
Voláním TypeGetTypeFromCLSID metody získejte objekt, který představuje
__ComObject
objekt odpovídající identifikátoru CLSID.Activator.CreateInstance(Type) Volání metody pro vytvoření instance objektu COM.
Obrázek najdete v příkladu.
Přetížení GetTypeFromCLSID(Guid) ignoruje všechny výjimky, ke kterým může dojít při vytváření instance objektu Type na základě argumentu clsid
. Všimněte si, že pokud clsid
se v registru nenajde, nevyvolá se žádná výjimka.
Poznámky pro volající
Tato metoda je určena pro použití při práci s objekty COM, nikoli s objekty rozhraní .NET Framework. Všechny spravované objekty, včetně těch, které jsou viditelné modelu COM (tj. jejich ComVisibleAttribute atribut je true
) mají identifikátor GUID, který je vrácen vlastností GUID . I když metoda vrací Type objekt, který odpovídá identifikátoru GUID pro objekty rozhraní .NET Framework, nelze tento objekt použít Type k vytvoření instance typu voláním CreateInstance(Type) metody, jak ukazuje následující příklad.
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)).
Místo toho GetTypeFromCLSID(Guid, String, Boolean) by měl být použit pouze k načtení identifikátoru GUID nespravovaného objektu COM a výsledný Type objekt, který je předán CreateInstance(Type) metodě musí představovat nespravovaný objekt COM.
Platí pro
GetTypeFromCLSID(Guid, Boolean)
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
Získá typ přidružený k identifikátoru zadané třídy (CLSID), určující, zda má být vyvolána výjimka, pokud dojde k chybě při načítání typu.
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
Parametry
- clsid
- Guid
Identifikátor CLSID typu, který má být získán.
- throwOnError
- Boolean
true
k vyvolání jakékoli výjimky, ke které dojde.
-nebo-
false
ignorovat všechny výjimky, ke kterým dojde.
Návraty
System.__ComObject
bez ohledu na to, zda je identifikátor CLSID platný.
- Atributy
Příklady
Následující příklad používá CLSID objektu aplikace Microsoft Word k načtení typu com, který představuje aplikaci Microsoft Word. Poté vytvoří instanci typu voláním Activator.CreateInstance metody a zavře ji voláním metody Application.Quit . Pokud při načítání typu dojde k chybě, vyvolá se výjimka.
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
Poznámky
Metoda GetTypeFromCLSID podporuje pozdní přístup k nespravovaným objektům COM z aplikací .NET Framework, pokud znáte identifikátor třídy objektu COM (CLSID). Identifikátor třídy modelu COM je definován v klíči HKEY_CLASSES_ROOT\CLSID registru. Můžete načíst hodnotu IsCOMObject vlastnosti určit, zda typ vrácený touto metodou je objekt COM.
Tip
Můžete volat metodu GetTypeFromProgID pro pozdní přístup k objektům COM, jejichž programový identifikátor (ProgID) znáte.
Vytvoření instance nespravovaného objektu COM z jeho IDENTIFIKÁTORu CLSID je dvoustupňový proces:
Voláním TypeGetTypeFromCLSID metody získejte objekt, který představuje
__ComObject
objekt odpovídající identifikátoru CLSID.Activator.CreateInstance(Type) Volání metody pro vytvoření instance objektu COM.
Obrázek najdete v příkladu.
Při zadávání true
pro throwOnError
vyvolání výjimek, jako je OutOfMemoryException , ale u neregistrovaných identifikátorů CLSID nedojde k selhání.
Poznámky pro volající
Tato metoda je určena pro použití při práci s objekty COM, nikoli s objekty rozhraní .NET Framework. Všechny spravované objekty, včetně těch, které jsou viditelné modelu COM (tj. jejich ComVisibleAttribute atribut je true
) mají identifikátor GUID, který je vrácen vlastností GUID . I když metoda vrací Type objekt, který odpovídá identifikátoru GUID pro objekty rozhraní .NET Framework, nelze tento objekt použít Type k vytvoření instance typu voláním CreateInstance(Type) metody, jak ukazuje následující příklad.
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)).
Místo toho GetTypeFromCLSID(Guid, String, Boolean) by měl být použit pouze k načtení identifikátoru GUID nespravovaného objektu COM a výsledný Type objekt, který je předán CreateInstance(Type) metodě musí představovat nespravovaný objekt COM.
Platí pro
GetTypeFromCLSID(Guid, String)
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
Získá typ přidružený k identifikátoru zadané třídy (CLSID) ze zadaného serveru.
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
Parametry
- clsid
- Guid
Identifikátor CLSID typu, který má být získán.
- server
- String
Server, ze kterého chcete typ načíst. Pokud je null
název serveru , tato metoda se automaticky vrátí k místnímu počítači.
Návraty
System.__ComObject
bez ohledu na to, zda je identifikátor CLSID platný.
- Atributy
Příklady
Následující příklad používá IDENTIFIKÁTOR CLSID objektu aplikace Microsoft Word k načtení typu com, který představuje aplikaci Microsoft Word ze serveru s názvem computer17.central.contoso.com. Poté vytvoří instanci typu voláním Activator.CreateInstance metody a zavře ji voláním metody 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
Poznámky
Metoda GetTypeFromCLSID podporuje pozdní přístup k nespravovaným objektům COM z aplikací .NET Framework, pokud znáte identifikátor třídy objektu COM (CLSID). Identifikátor třídy modelu COM je definován v klíči HKEY_CLASSES_ROOT\CLSID registru. Můžete načíst hodnotu IsCOMObject vlastnosti určit, zda typ vrácený touto metodou je objekt COM.
Tip
Můžete volat metodu GetTypeFromProgID pro pozdní přístup k objektům COM, jejichž programový identifikátor (ProgID) znáte.
Vytvoření instance nespravovaného objektu COM z jeho IDENTIFIKÁTORu CLSID je dvoustupňový proces:
Voláním TypeGetTypeFromCLSID metody získejte objekt, který představuje
__ComObject
objekt odpovídající identifikátoru CLSID.Activator.CreateInstance(Type) Volání metody pro vytvoření instance objektu COM.
Poznámky pro volající
Tato metoda je určena pro použití při práci s objekty COM, nikoli s objekty rozhraní .NET Framework. Všechny spravované objekty, včetně těch, které jsou viditelné modelu COM (tj. jejich ComVisibleAttribute atribut je true
) mají identifikátor GUID, který je vrácen vlastností GUID . I když metoda vrací Type objekt, který odpovídá identifikátoru GUID pro objekty rozhraní .NET Framework, nelze tento objekt použít Type k vytvoření instance typu voláním CreateInstance(Type) metody, jak ukazuje následující příklad.
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)).
Místo toho GetTypeFromCLSID(Guid, String, Boolean) by měl být použit pouze k načtení identifikátoru GUID nespravovaného objektu COM a výsledný Type objekt, který je předán CreateInstance(Type) metodě musí představovat nespravovaný objekt COM.
Platí pro
GetTypeFromCLSID(Guid, String, Boolean)
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
Získá typ přidružený k identifikátoru zadané třídy (CLSID) ze zadaného serveru a určuje, zda má být vyvolána výjimka, pokud dojde k chybě při načítání typu.
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
Parametry
- clsid
- Guid
Identifikátor CLSID typu, který má být získán.
- server
- String
Server, ze kterého chcete typ načíst. Pokud je null
název serveru , tato metoda se automaticky vrátí k místnímu počítači.
- throwOnError
- Boolean
true
k vyvolání jakékoli výjimky, ke které dojde.
-nebo-
false
ignorovat všechny výjimky, ke kterým dojde.
Návraty
System.__ComObject
bez ohledu na to, zda je identifikátor CLSID platný.
- Atributy
Příklady
Následující příklad používá IDENTIFIKÁTOR CLSID objektu aplikace Microsoft Word k načtení typu com, který představuje aplikaci Microsoft Word ze serveru s názvem computer17.central.contoso.com. Poté vytvoří instanci typu voláním Activator.CreateInstance metody a zavře ji voláním metody Application.Quit . Pokud při načítání typu dojde k chybě, vyvolá se výjimka.
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
Poznámky
Metoda GetTypeFromCLSID podporuje pozdní přístup k nespravovaným objektům COM z aplikací .NET Framework, pokud znáte identifikátor třídy objektu COM (CLSID). Identifikátor třídy modelu COM je definován v klíči HKEY_CLASSES_ROOT\CLSID registru. Můžete načíst hodnotu IsCOMObject vlastnosti určit, zda typ vrácený touto metodou je objekt COM.
Tip
Můžete volat metodu GetTypeFromProgID pro pozdní přístup k objektům COM, jejichž programový identifikátor (ProgID) znáte.
Vytvoření instance nespravovaného objektu COM z jeho IDENTIFIKÁTORu CLSID je dvoustupňový proces:
Voláním TypeGetTypeFromCLSID metody získejte objekt, který představuje
__ComObject
objekt odpovídající identifikátoru CLSID.Activator.CreateInstance(Type) Volání metody pro vytvoření instance objektu COM.
Při zadávání true
pro throwOnError
vyvolání výjimek, jako je OutOfMemoryException , ale u neregistrovaných identifikátorů CLSID nedojde k selhání.
Poznámky pro volající
Tato metoda je určena pro použití při práci s objekty COM, nikoli s objekty rozhraní .NET Framework. Všechny spravované objekty, včetně těch, které jsou viditelné modelu COM (tj. jejich ComVisibleAttribute atribut je true
) mají identifikátor GUID, který je vrácen vlastností GUID .
GetTypeFromCLSID(Guid, String, Boolean) I když metoda vrací Type objekt, který odpovídá identifikátoru GUID konkrétního spravovaného objektu, nemůžete ho použít Type k vytvoření instance typu voláním CreateInstance(Type) metody , jak ukazuje následující příklad.
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)).
Místo toho GetTypeFromCLSID(Guid, String, Boolean) by měl být použit pouze k načtení identifikátoru GUID nespravovaného objektu COM a výsledný Type objekt, který je předán CreateInstance(Type) metodě musí představovat nespravovaný objekt COM.