英語で読む

次の方法で共有


Type.GetTypeFromCLSID メソッド

定義

指定したクラス識別子 (CLSID) に関連付けられている型を取得します。

オーバーロード

GetTypeFromCLSID(Guid)

指定したクラス識別子 (CLSID) に関連付けられている型を取得します。

GetTypeFromCLSID(Guid, Boolean)

型の読み込み中にエラーが発生した場合に例外をスローするかどうかを指定して、指定したクラス ID (CLSID) に関連付けられた型を取得します。

GetTypeFromCLSID(Guid, String)

指定したサーバーから、指定したクラス ID (CLSID) に関連付けられている型を取得します。

GetTypeFromCLSID(Guid, String, Boolean)

型の読み込み中にエラーが発生した場合に例外をスローするかどうかを指定して、指定したサーバーの指定したクラス ID (CLSID) に関連付けられた型を取得します。

GetTypeFromCLSID(Guid)

ソース:
Type.cs
ソース:
Type.cs
ソース:
Type.cs

指定したクラス識別子 (CLSID) に関連付けられている型を取得します。

C#
public static Type? GetTypeFromCLSID (Guid clsid);
C#
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid);
C#
public static Type GetTypeFromCLSID (Guid clsid);

パラメーター

clsid
Guid

取得する型の CLSID。

戻り値

CLSID が有効かどうかに関係なく System.__ComObject

属性

次の例では、Microsoft Word Application オブジェクト の CLSID を使用して、Microsoft Word アプリケーションを表す COM 型を取得します。 次に、 メソッドを呼び出して型を Activator.CreateInstance インスタンス化し、 Application.Quit メソッドを呼び出して型を閉じます。

C#
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

注釈

メソッドはGetTypeFromCLSID、COM オブジェクトのクラス識別子 (CLSID) がわかっている場合に、.NET Framework アプリからアンマネージ COM オブジェクトへの遅延バインディング アクセスをサポートします。 COM クラスのクラス識別子は、レジストリのHKEY_CLASSES_ROOT\CLSID キーで定義されます。 プロパティの値を取得して、 IsCOMObject このメソッドによって返される型が COM オブジェクトであるかどうかを判断できます。

ヒント

プログラム識別子 (ProgID) がわかっている COM オブジェクトへの遅延バインディング アクセスのメソッドを呼び出 GetTypeFromProgID すことができます。

CLSID からアンマネージ COM オブジェクトをインスタンス化することは、次の 2 段階のプロセスです。

  1. メソッドを Type 呼び出して、CLSID に対応する を表す__ComObject オブジェクトを GetTypeFromCLSID 取得します。

  2. メソッドを Activator.CreateInstance(Type) 呼び出して COM オブジェクトをインスタンス化します。

図については、例を参照してください。

オーバーロードは GetTypeFromCLSID(Guid) 、 引数に基づいてオブジェクトをインスタンス化するときに発生する Type 可能性のある例外を clsid 無視します。 がレジストリで見つからない場合 clsid 、例外はスローされないことに注意してください。

注意 (呼び出し元)

このメソッドは、.NET Framework オブジェクトではなく COM オブジェクトを操作する場合に使用することを目的としています。 COM に表示されるオブジェクト (つまり、属性 ComVisibleAttribute が ) を含むすべてのマネージド オブジェクトには true、 プロパティによって GUID 返される GUID があります。 メソッドは、.NET Framework オブジェクトの GUID に対応するオブジェクトを返Typeしますが、次の例に示すように、 メソッドを呼び出して、そのTypeオブジェクトをCreateInstance(Type)使用して型インスタンスを作成することはできません。

C#
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)).

代わりに、 をGetTypeFromCLSID(Guid, String, Boolean)使用してアンマネージド COM オブジェクトの GUID を取得する必要があります。メソッドにCreateInstance(Type)渡される結果Typeのオブジェクトは、アンマネージ COM オブジェクトを表す必要があります。

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetTypeFromCLSID(Guid, Boolean)

ソース:
Type.cs
ソース:
Type.cs
ソース:
Type.cs

型の読み込み中にエラーが発生した場合に例外をスローするかどうかを指定して、指定したクラス ID (CLSID) に関連付けられた型を取得します。

C#
public static Type? GetTypeFromCLSID (Guid clsid, bool throwOnError);
C#
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid, bool throwOnError);
C#
public static Type GetTypeFromCLSID (Guid clsid, bool throwOnError);

パラメーター

clsid
Guid

取得する型の CLSID。

throwOnError
Boolean

発生した例外をすべてスローする場合は true

または

発生した例外をすべて無視する場合は false

戻り値

CLSID が有効かどうかに関係なく System.__ComObject

属性

次の例では、Microsoft Word Application オブジェクト の CLSID を使用して、Microsoft Word アプリケーションを表す COM 型を取得します。 次に、 メソッドを呼び出して型を Activator.CreateInstance インスタンス化し、 Application.Quit メソッドを呼び出して型を閉じます。 型の読み込み中にエラーが発生すると、例外がスローされます。

C#
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

注釈

メソッドはGetTypeFromCLSID、COM オブジェクトのクラス識別子 (CLSID) がわかっている場合に、.NET Framework アプリからアンマネージ COM オブジェクトへの遅延バインディング アクセスをサポートします。 COM クラスのクラス識別子は、レジストリのHKEY_CLASSES_ROOT\CLSID キーで定義されます。 プロパティの値を取得して、 IsCOMObject このメソッドによって返される型が COM オブジェクトであるかどうかを判断できます。

ヒント

プログラム識別子 (ProgID) がわかっている COM オブジェクトへの遅延バインディング アクセスのメソッドを呼び出 GetTypeFromProgID すことができます。

CLSID からアンマネージ COM オブジェクトをインスタンス化することは、次の 2 段階のプロセスです。

  1. メソッドを Type 呼び出して、CLSID に対応する を表す __ComObject オブジェクトを GetTypeFromCLSID 取得します。

  2. メソッドを Activator.CreateInstance(Type) 呼び出して COM オブジェクトをインスタンス化します。

図については、例を参照してください。

などのOutOfMemoryException例外は、 にをtruethrowOnError指定するときにスローされますが、登録されていない CLSID では失敗しません。

注意 (呼び出し元)

このメソッドは、.NET Framework オブジェクトではなく COM オブジェクトを操作する場合に使用することを目的としています。 COM に表示されるオブジェクト (つまり、属性 ComVisibleAttribute が ) を含むすべてのマネージド オブジェクトには true、 プロパティによって GUID 返される GUID があります。 メソッドは、.NET Framework オブジェクトの GUID に対応するオブジェクトを返Typeしますが、次の例に示すように、 メソッドを呼び出して、そのTypeオブジェクトをCreateInstance(Type)使用して型インスタンスを作成することはできません。

C#
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)).

代わりに、 をGetTypeFromCLSID(Guid, String, Boolean)使用してアンマネージド COM オブジェクトの GUID を取得する必要があります。メソッドにCreateInstance(Type)渡される結果Typeのオブジェクトは、アンマネージ COM オブジェクトを表す必要があります。

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetTypeFromCLSID(Guid, String)

ソース:
Type.cs
ソース:
Type.cs
ソース:
Type.cs

指定したサーバーから、指定したクラス ID (CLSID) に関連付けられている型を取得します。

C#
public static Type? GetTypeFromCLSID (Guid clsid, string? server);
C#
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid, string? server);
C#
public static Type GetTypeFromCLSID (Guid clsid, string server);

パラメーター

clsid
Guid

取得する型の CLSID。

server
String

型の読み込み元のサーバー。 サーバー名が nullの場合、このメソッドは自動的にローカル マシンの名前を使用します。

戻り値

CLSID が有効かどうかに関係なく System.__ComObject

属性

次の例では、Microsoft Word Application オブジェクト の CLSID を使用して、computer17.central.contoso.com という名前のサーバーから Microsoft Word アプリケーションを表す COM 型を取得します。 次に、 メソッドを呼び出して型を Activator.CreateInstance インスタンス化し、 Application.Quit メソッドを呼び出して型を閉じます。

C#
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

注釈

メソッドはGetTypeFromCLSID、COM オブジェクトのクラス識別子 (CLSID) がわかっている場合に、.NET Framework アプリからアンマネージ COM オブジェクトへの遅延バインディング アクセスをサポートします。 COM クラスのクラス識別子は、レジストリのHKEY_CLASSES_ROOT\CLSID キーで定義されます。 プロパティの値を取得して、 IsCOMObject このメソッドによって返される型が COM オブジェクトであるかどうかを判断できます。

ヒント

プログラム識別子 (ProgID) がわかっている COM オブジェクトへの遅延バインディング アクセスのメソッドを呼び出 GetTypeFromProgID すことができます。

CLSID からアンマネージ COM オブジェクトをインスタンス化することは、次の 2 段階のプロセスです。

  1. メソッドを Type 呼び出して、CLSID に対応する を表す __ComObject オブジェクトを GetTypeFromCLSID 取得します。

  2. メソッドを Activator.CreateInstance(Type) 呼び出して COM オブジェクトをインスタンス化します。

注意 (呼び出し元)

このメソッドは、.NET Framework オブジェクトではなく COM オブジェクトを操作する場合に使用することを目的としています。 COM に表示されるオブジェクト (つまり、属性 ComVisibleAttribute が ) を含むすべてのマネージド オブジェクトには true、 プロパティによって GUID 返される GUID があります。 メソッドは、.NET Framework オブジェクトの GUID に対応するオブジェクトを返Typeしますが、次の例に示すように、 メソッドを呼び出して、そのTypeオブジェクトをCreateInstance(Type)使用して型インスタンスを作成することはできません。

C#
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)).

代わりに、 をGetTypeFromCLSID(Guid, String, Boolean)使用してアンマネージド COM オブジェクトの GUID を取得する必要があります。メソッドにCreateInstance(Type)渡される結果Typeのオブジェクトは、アンマネージ COM オブジェクトを表す必要があります。

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetTypeFromCLSID(Guid, String, Boolean)

ソース:
Type.cs
ソース:
Type.cs
ソース:
Type.cs

型の読み込み中にエラーが発生した場合に例外をスローするかどうかを指定して、指定したサーバーの指定したクラス ID (CLSID) に関連付けられた型を取得します。

C#
public static Type? GetTypeFromCLSID (Guid clsid, string? server, bool throwOnError);
C#
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static Type? GetTypeFromCLSID (Guid clsid, string? server, bool throwOnError);
C#
public static Type GetTypeFromCLSID (Guid clsid, string server, bool throwOnError);

パラメーター

clsid
Guid

取得する型の CLSID。

server
String

型の読み込み元のサーバー。 サーバー名が nullの場合、このメソッドは自動的にローカル マシンの名前を使用します。

throwOnError
Boolean

発生した例外をすべてスローする場合は true

または

発生した例外をすべて無視する場合は false

戻り値

CLSID が有効かどうかに関係なく System.__ComObject

属性

次の例では、Microsoft Word Application オブジェクト の CLSID を使用して、computer17.central.contoso.com という名前のサーバーから Microsoft Word アプリケーションを表す COM 型を取得します。 次に、 メソッドを呼び出して型を Activator.CreateInstance インスタンス化し、 Application.Quit メソッドを呼び出して型を閉じます。 型の読み込み中にエラーが発生すると、例外がスローされます。

C#
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

注釈

メソッドはGetTypeFromCLSID、COM オブジェクトのクラス識別子 (CLSID) がわかっている場合に、.NET Framework アプリからアンマネージ COM オブジェクトへの遅延バインディング アクセスをサポートします。 COM クラスのクラス識別子は、レジストリのHKEY_CLASSES_ROOT\CLSID キーで定義されます。 プロパティの値を取得して、 IsCOMObject このメソッドによって返される型が COM オブジェクトであるかどうかを判断できます。

ヒント

プログラム識別子 (ProgID) がわかっている COM オブジェクトへの遅延バインディング アクセスのメソッドを呼び出 GetTypeFromProgID すことができます。

CLSID からアンマネージ COM オブジェクトをインスタンス化することは、次の 2 段階のプロセスです。

  1. メソッドを Type 呼び出して、CLSID に対応する を表す __ComObject オブジェクトを GetTypeFromCLSID 取得します。

  2. メソッドを Activator.CreateInstance(Type) 呼び出して COM オブジェクトをインスタンス化します。

などのOutOfMemoryException例外は、 にをtruethrowOnError指定するときにスローされますが、登録されていない CLSID では失敗しません。

注意 (呼び出し元)

このメソッドは、.NET Framework オブジェクトではなく COM オブジェクトを操作する場合に使用することを目的としています。 COM に表示されるオブジェクト (つまり、属性 ComVisibleAttribute が ) を含むすべてのマネージド オブジェクトには true、 プロパティによって GUID 返される GUID があります。 メソッドは GetTypeFromCLSID(Guid, String, Boolean) 、特定のマネージド オブジェクトの GUID に対応するオブジェクトを返 Type しますが、次の例に示すように、 メソッドを呼び出して、その Type オブジェクトを CreateInstance(Type) 使用して型インスタンスを作成することはできません。

C#
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)).

代わりに、 をGetTypeFromCLSID(Guid, String, Boolean)使用してアンマネージド COM オブジェクトの GUID を取得する必要があります。メソッドにCreateInstance(Type)渡される結果Typeのオブジェクトは、アンマネージ COM オブジェクトを表す必要があります。

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1