指定した 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 セキュリティ:
- ReflectionPermission (Type.InvokeMember などの機構を通じて遅延バインディングが呼び出されるときに必要なアクセス許可) ReflectionPermissionFlag.MemberAccess (関連する列挙体)
参照
AppDomain クラス | AppDomain メンバ | System 名前空間 | AppDomain.CreateComInstanceFrom オーバーロードの一覧 | Activator.CreateComInstanceFrom