次の方法で共有


AppDomain.CreateComInstanceFrom メソッド (String, String)

指定した COM 型の新しいインスタンスを作成します。パラメータには、型を含んでいるアセンブリのファイルの名前および型の名前を指定します。

Overloads Public Function CreateComInstanceFrom( _
   ByVal assemblyName As String, _   ByVal typeName As String _) As ObjectHandle
[C#]
public ObjectHandle CreateComInstanceFrom(stringassemblyName,stringtypeName);
[C++]
public: ObjectHandle* CreateComInstanceFrom(String* assemblyName,String* typeName);
[JScript]
public function CreateComInstanceFrom(
   assemblyName : String,typeName : String) : ObjectHandle;

パラメータ

  • assemblyName
    要求された型を定義するアセンブリが格納されているファイルの名前。
  • typeName
    要求された型の名前。

戻り値

typeName で指定した新しいインスタンスのラッパーであるオブジェクト。実際のオブジェクトにアクセスするには、戻り値のラップを解除する必要があります。

例外

例外の種類 条件
ArgumentNullException assemblyName または typeName が null 参照 (Visual Basic では Nothing) です。
TypeLoadException 型を読み込むことができません。
SecurityException 呼び出し元に、正しいアクセス許可がありません。要件のセクションを参照してください。
AppDomainUnloadedException 操作が、アンロードされたアプリケーション ドメインで試行されています。

解説

このメソッドを使用すると、型をローカルに読み込まなくても、オブジェクトをリモートで作成できます。

実際のオブジェクトにアクセスするには、戻り値のラップを解除する必要があります。

このメソッドで COM 型のインスタンスを作成するには、値を true に設定した System.Runtime.InteropServices.ComVisibleAttribute 属性をその COM 型に明示的にまたは既定で適用する必要があります。それ以外の場合は TypeLoadException がスローされます。

使用例

[Visual Basic, C#, C++] サンプルを次に示します。

 
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices

<ComVisible(True)> _
Class MyComVisibleType

   Public Sub New()
      Console.WriteLine("MyComVisibleType instantiated!")
   End Sub 'New

End Class 'MyComVisibleType

<ComVisible(False)> _
Class MyComNonVisibleType

   Public Sub New()
      Console.WriteLine("MyComNonVisibleType instantiated!")
   End Sub 'New

End Class 'MyComNonVisibleType

Module Test

   Sub Main()
      CreateComInstance("MyComNonVisibleType")   ' Fail!
      CreateComInstance("MyComVisibleType")      ' OK!
   End Sub 'Main

   Sub CreateComInstance(typeName As String)
      Try
         Dim currentDomain As AppDomain = AppDomain.CurrentDomain
         Dim assemblyName As String = currentDomain.FriendlyName
         currentDomain.CreateComInstanceFrom(assemblyName, typeName)
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub 'CreateComInstance

End Module 'Test

[C#] 
using System;
using System.Reflection;
using System.Runtime.InteropServices;

[ComVisible(true)]
class MyComVisibleType {
   public MyComVisibleType() {
      Console.WriteLine("MyComVisibleType instantiated!");
   }
}

[ComVisible(false)]
class MyComNonVisibleType {
   public MyComNonVisibleType() {
      Console.WriteLine("MyComNonVisibleType instantiated!");
   }
}

class Test {
   public static void Main() {
      CreateComInstance("MyComNonVisibleType");   // Fail!
      CreateComInstance("MyComVisibleType");      // OK!
   }
   
   static void CreateComInstance(string typeName) {
      try {
         AppDomain currentDomain = AppDomain.CurrentDomain;
         string assemblyName = currentDomain.FriendlyName;
         currentDomain.CreateComInstanceFrom(assemblyName, typeName);
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }
}

[C++] 
#using <mscorlib.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::InteropServices;

[ComVisible(true)]
public __gc class MyComVisibleType {
public:
   MyComVisibleType() {
      Console::WriteLine(S"MyComVisibleType instantiated!");
   }
};

[ComVisible(false)]
public __gc class MyComNonVisibleType {
public:
   MyComNonVisibleType() {
      Console::WriteLine(S"MyComNonVisibleType instantiated!");
   }
};

void CreateComInstance(String* typeName) {
   try {
      AppDomain*  currentDomain = AppDomain::CurrentDomain;
      String* assemblyName = currentDomain->FriendlyName;
      currentDomain->CreateComInstanceFrom(assemblyName, typeName);
   } catch (Exception* e) {
      Console::WriteLine(e->Message);
   }
}

int main() {
   CreateComInstance(S"MyComNonVisibleType");   // Fail!
   CreateComInstance(S"MyComVisibleType");      // OK!
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

.NET Framework セキュリティ:

参照

AppDomain クラス | AppDomain メンバ | System 名前空間 | AppDomain.CreateComInstanceFrom オーバーロードの一覧 | Activator.CreateComInstanceFrom