Type.GetTypeFromCLSID Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Belirtilen sınıf tanımlayıcısıyla (CLSID) ilişkili türü alır.
Aşırı Yüklemeler
GetTypeFromCLSID(Guid) |
Belirtilen sınıf tanımlayıcısıyla (CLSID) ilişkili türü alır. |
GetTypeFromCLSID(Guid, Boolean) |
Belirtilen sınıf tanımlayıcısıyla (CLSID) ilişkili türü alır ve tür yüklenirken bir hata oluşursa özel durum oluşturulup oluşturulmayacağını belirtir. |
GetTypeFromCLSID(Guid, String) |
Belirtilen sunucudan belirtilen sınıf tanımlayıcısıyla (CLSID) ilişkili türü alır. |
GetTypeFromCLSID(Guid, String, Boolean) |
Belirtilen sunucudan belirtilen sınıf tanımlayıcısıyla (CLSID) ilişkili türü alır ve tür yüklenirken bir hata oluşursa özel durum oluşturulup oluşturulmayacağını belirtir. |
GetTypeFromCLSID(Guid)
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
Belirtilen sınıf tanımlayıcısıyla (CLSID) ilişkili türü alır.
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
Parametreler
- clsid
- Guid
Alınacak türün CLSID değeri.
Döndürülenler
System.__ComObject
CLSID'nin geçerli olup olmadığına bakılmaksızın.
- Öznitelikler
Örnekler
Aşağıdaki örnek, Microsoft Word uygulamasını temsil eden bir COM türünü almak için Microsoft Word Uygulaması nesnesinin CLSID'sini kullanır. Ardından yöntemini çağırarak türün örneğini Activator.CreateInstance oluşturur ve Application.Quit yöntemini çağırarak kapatır.
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
Açıklamalar
yöntemi, GetTypeFromCLSID COM nesnesinin sınıf tanımlayıcısını (CLSID) bildiğinizde .NET Framework uygulamalardan yönetilmeyen COM nesnelerine geç bağlı erişimi destekler. COM sınıflarının sınıf tanımlayıcısı, kayıt defterinin HKEY_CLASSES_ROOT\CLSID anahtarında tanımlanır. Bu yöntem tarafından döndürülen türün IsCOMObject bir COM nesnesi olup olmadığını belirlemek için özelliğinin değerini alabilirsiniz.
İpucu
Programlama tanımlayıcısını GetTypeFromProgID (ProgID) bildiğiniz COM nesnelerine geç bağlanan erişim için yöntemini çağırabilirsiniz.
Yönetilmeyen bir COM nesnesini CLSID'sinden örneklemek iki adımlı bir işlemdir:
yöntemini çağırarak GetTypeFromCLSID CLSID'ye karşılık gelen öğesini temsil eden
__ComObject
bir Type nesne alın.Activator.CreateInstance(Type) COM nesnesinin örneğini görüntülemek için yöntemini çağırın.
Çizim örneğine bakın.
Aşırı yükleme, GetTypeFromCLSID(Guid) bağımsız değişkenine göre clsid
bir Type nesne örneği oluşturulurken oluşabilecek özel durumları yoksayar. Kayıt defterinde bulunamazsa clsid
hiçbir özel durum oluştuğuna dikkat edin.
Arayanlara Notlar
Bu yöntem, .NET Framework nesnelerle değil, COM nesneleriyle çalışırken kullanılmak üzere tasarlanmıştır. COM'a görünür olanlar da dahil olmak üzere tüm yönetilen nesnelerin (öznitelikleri ComVisibleAttribute ) true
özelliği tarafından GUID döndürülen bir GUID'si vardır. yöntemi, .NET Framework nesnelerin GUID'sine karşılık gelen bir Type nesne döndürse de, aşağıdaki örnekte gösterildiği gibi yöntemini çağırarak CreateInstance(Type) bir tür örneği oluşturmak için bu Type nesneyi kullanamazsınız.
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)).
Bunun yerine, GetTypeFromCLSID(Guid, String, Boolean) yalnızca yönetilmeyen bir COM nesnesinin GUID'sini almak için kullanılmalıdır ve yönteme CreateInstance(Type) geçirilen sonuçta Type elde edilen nesne yönetilmeyen bir COM nesnesini temsil etmelidir.
Şunlara uygulanır
GetTypeFromCLSID(Guid, Boolean)
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
Belirtilen sınıf tanımlayıcısıyla (CLSID) ilişkili türü alır ve tür yüklenirken bir hata oluşursa özel durum oluşturulup oluşturulmayacağını belirtir.
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
Parametreler
- clsid
- Guid
Alınacak türün CLSID değeri.
- throwOnError
- Boolean
true
oluşan herhangi bir özel durum oluşturur.
-veya-
false
oluşan özel durumları yoksaymak için.
Döndürülenler
System.__ComObject
CLSID'nin geçerli olup olmadığına bakılmaksızın.
- Öznitelikler
Örnekler
Aşağıdaki örnek, Microsoft Word uygulamasını temsil eden bir COM türünü almak için Microsoft Word Uygulaması nesnesinin CLSID'sini kullanır. Ardından yöntemini çağırarak türün örneğini Activator.CreateInstance oluşturur ve Application.Quit yöntemini çağırarak kapatır. Tür yüklenirken bir hata oluşursa bir özel durum oluşur.
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
Açıklamalar
yöntemi, GetTypeFromCLSID COM nesnesinin sınıf tanımlayıcısını (CLSID) bildiğinizde .NET Framework uygulamalardan yönetilmeyen COM nesnelerine geç bağlı erişimi destekler. COM sınıflarının sınıf tanımlayıcısı, kayıt defterinin HKEY_CLASSES_ROOT\CLSID anahtarında tanımlanır. Bu yöntem tarafından döndürülen türün IsCOMObject bir COM nesnesi olup olmadığını belirlemek için özelliğinin değerini alabilirsiniz.
İpucu
Programlama tanımlayıcısını GetTypeFromProgID (ProgID) bildiğiniz COM nesnelerine geç bağlanan erişim için yöntemini çağırabilirsiniz.
Yönetilmeyen bir COM nesnesini CLSID'sinden örneklemek iki adımlı bir işlemdir:
yöntemini çağırarak GetTypeFromCLSID CLSID'ye karşılık gelen öğesini temsil eden
__ComObject
bir Type nesne alın.Activator.CreateInstance(Type) COM nesnesinin örneğini görüntülemek için yöntemini çağırın.
Çizim örneğine bakın.
gibi OutOfMemoryException özel durumlar için throwOnError
belirtilirken true
oluşturulur, ancak kaydedilmemiş CLSID'ler için başarısız olmaz.
Arayanlara Notlar
Bu yöntem, .NET Framework nesnelerle değil, COM nesneleriyle çalışırken kullanılmak üzere tasarlanmıştır. COM'a görünür olanlar da dahil olmak üzere tüm yönetilen nesnelerin (öznitelikleri ComVisibleAttribute ) true
özelliği tarafından GUID döndürülen bir GUID'si vardır. yöntemi, .NET Framework nesnelerin GUID'sine karşılık gelen bir Type nesne döndürse de, aşağıdaki örnekte gösterildiği gibi yöntemini çağırarak CreateInstance(Type) bir tür örneği oluşturmak için bu Type nesneyi kullanamazsınız.
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)).
Bunun yerine, GetTypeFromCLSID(Guid, String, Boolean) yalnızca yönetilmeyen bir COM nesnesinin GUID'sini almak için kullanılmalıdır ve yönteme CreateInstance(Type) geçirilen sonuçta Type elde edilen nesne yönetilmeyen bir COM nesnesini temsil etmelidir.
Şunlara uygulanır
GetTypeFromCLSID(Guid, String)
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
Belirtilen sunucudan belirtilen sınıf tanımlayıcısıyla (CLSID) ilişkili türü alır.
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
Parametreler
- clsid
- Guid
Alınacak türün CLSID değeri.
- server
- String
Türün yükleneceği kaynak olan sunucu. Sunucu adı ise null
, bu yöntem otomatik olarak yerel makineye geri döner.
Döndürülenler
System.__ComObject
CLSID'nin geçerli olup olmadığına bakılmaksızın.
- Öznitelikler
Örnekler
Aşağıdaki örnekte, microsoft word uygulamasını temsil eden bir COM türünü computer17.central.contoso.com adlı bir sunucudan almak için Microsoft Word Application nesnesinin CLSID'sini kullanır. Ardından yöntemini çağırarak türün örneğini Activator.CreateInstance oluşturur ve Application.Quit yöntemini çağırarak kapatır.
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
Açıklamalar
yöntemi, GetTypeFromCLSID COM nesnesinin sınıf tanımlayıcısını (CLSID) bildiğinizde .NET Framework uygulamalardan yönetilmeyen COM nesnelerine geç bağlı erişimi destekler. COM sınıflarının sınıf tanımlayıcısı, kayıt defterinin HKEY_CLASSES_ROOT\CLSID anahtarında tanımlanır. Bu yöntem tarafından döndürülen türün IsCOMObject bir COM nesnesi olup olmadığını belirlemek için özelliğinin değerini alabilirsiniz.
İpucu
Programlama tanımlayıcısını GetTypeFromProgID (ProgID) bildiğiniz COM nesnelerine geç bağlanan erişim için yöntemini çağırabilirsiniz.
Yönetilmeyen bir COM nesnesini CLSID'sinden örneklemek iki adımlı bir işlemdir:
yöntemini çağırarak GetTypeFromCLSID CLSID'ye karşılık gelen öğesini temsil eden
__ComObject
bir Type nesne alın.Activator.CreateInstance(Type) COM nesnesinin örneğini görüntülemek için yöntemini çağırın.
Arayanlara Notlar
Bu yöntem, .NET Framework nesnelerle değil, COM nesneleriyle çalışırken kullanılmak üzere tasarlanmıştır. COM'a görünür olanlar da dahil olmak üzere tüm yönetilen nesnelerin (öznitelikleri ComVisibleAttribute ) true
özelliği tarafından GUID döndürülen bir GUID'si vardır. yöntemi, .NET Framework nesnelerin GUID'sine karşılık gelen bir Type nesne döndürse de, aşağıdaki örnekte gösterildiği gibi yöntemini çağırarak CreateInstance(Type) bir tür örneği oluşturmak için bu Type nesneyi kullanamazsınız.
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)).
Bunun yerine, GetTypeFromCLSID(Guid, String, Boolean) yalnızca yönetilmeyen bir COM nesnesinin GUID'sini almak için kullanılmalıdır ve yönteme CreateInstance(Type) geçirilen sonuçta Type elde edilen nesne yönetilmeyen bir COM nesnesini temsil etmelidir.
Şunlara uygulanır
GetTypeFromCLSID(Guid, String, Boolean)
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
Belirtilen sunucudan belirtilen sınıf tanımlayıcısıyla (CLSID) ilişkili türü alır ve tür yüklenirken bir hata oluşursa özel durum oluşturulup oluşturulmayacağını belirtir.
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
Parametreler
- clsid
- Guid
Alınacak türün CLSID değeri.
- server
- String
Türün yükleneceği kaynak olan sunucu. Sunucu adı ise null
, bu yöntem otomatik olarak yerel makineye geri döner.
- throwOnError
- Boolean
true
oluşan herhangi bir özel durum oluşturur.
-veya-
false
oluşan özel durumları yoksaymak için.
Döndürülenler
System.__ComObject
CLSID'nin geçerli olup olmadığına bakılmaksızın.
- Öznitelikler
Örnekler
Aşağıdaki örnekte, microsoft word uygulamasını temsil eden bir COM türünü computer17.central.contoso.com adlı bir sunucudan almak için Microsoft Word Application nesnesinin CLSID'sini kullanır. Ardından yöntemini çağırarak türün örneğini Activator.CreateInstance oluşturur ve Application.Quit yöntemini çağırarak kapatır. Tür yüklenirken bir hata oluşursa bir özel durum oluşur.
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
Açıklamalar
yöntemi, GetTypeFromCLSID COM nesnesinin sınıf tanımlayıcısını (CLSID) bildiğinizde .NET Framework uygulamalardan yönetilmeyen COM nesnelerine geç bağlı erişimi destekler. COM sınıflarının sınıf tanımlayıcısı, kayıt defterinin HKEY_CLASSES_ROOT\CLSID anahtarında tanımlanır. Bu yöntem tarafından döndürülen türün IsCOMObject bir COM nesnesi olup olmadığını belirlemek için özelliğinin değerini alabilirsiniz.
İpucu
Programlama tanımlayıcısını GetTypeFromProgID (ProgID) bildiğiniz COM nesnelerine geç bağlanan erişim için yöntemini çağırabilirsiniz.
Yönetilmeyen bir COM nesnesini CLSID'sinden örneklemek iki adımlı bir işlemdir:
yöntemini çağırarak GetTypeFromCLSID CLSID'ye karşılık gelen öğesini temsil eden
__ComObject
bir Type nesne alın.Activator.CreateInstance(Type) COM nesnesinin örneğini görüntülemek için yöntemini çağırın.
gibi OutOfMemoryException özel durumlar için throwOnError
belirtilirken true
oluşturulur, ancak kaydedilmemiş CLSID'ler için başarısız olmaz.
Arayanlara Notlar
Bu yöntem, .NET Framework nesnelerle değil, COM nesneleriyle çalışırken kullanılmak üzere tasarlanmıştır. COM'a görünür olanlar da dahil olmak üzere tüm yönetilen nesnelerin (öznitelikleri ComVisibleAttribute ) true
özelliği tarafından GUID döndürülen bir GUID'si vardır. yöntemi, belirli bir Type yönetilen nesnenin GUID'sine karşılık gelen bir nesne döndürse GetTypeFromCLSID(Guid, String, Boolean) de, aşağıdaki örnekte gösterildiği gibi yöntemini çağırarak CreateInstance(Type) bir tür örneği oluşturmak için bu Type nesneyi kullanamazsınız.
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)).
Bunun yerine, GetTypeFromCLSID(Guid, String, Boolean) yalnızca yönetilmeyen bir COM nesnesinin GUID'sini almak için kullanılmalıdır ve yönteme CreateInstance(Type) geçirilen sonuçta Type elde edilen nesne yönetilmeyen bir COM nesnesini temsil etmelidir.