AppDomain.CreateComInstanceFrom 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
지정된 COM 형식의 새 인스턴스를 만듭니다.
오버로드
| Name | Description |
|---|---|
| CreateComInstanceFrom(String, String) |
지정된 COM 형식의 새 인스턴스를 만듭니다. 매개 변수는 형식과 형식의 이름을 포함하는 어셈블리를 포함하는 파일의 이름을 지정합니다. |
| CreateComInstanceFrom(String, String, Byte[], AssemblyHashAlgorithm) |
지정된 COM 형식의 새 인스턴스를 만듭니다. 매개 변수는 형식과 형식의 이름을 포함하는 어셈블리를 포함하는 파일의 이름을 지정합니다. |
CreateComInstanceFrom(String, String)
지정된 COM 형식의 새 인스턴스를 만듭니다. 매개 변수는 형식과 형식의 이름을 포함하는 어셈블리를 포함하는 파일의 이름을 지정합니다.
public:
System::Runtime::Remoting::ObjectHandle ^ CreateComInstanceFrom(System::String ^ assemblyName, System::String ^ typeName);
public System.Runtime.Remoting.ObjectHandle CreateComInstanceFrom(string assemblyName, string typeName);
member this.CreateComInstanceFrom : string * string -> System.Runtime.Remoting.ObjectHandle
Public Function CreateComInstanceFrom (assemblyName As String, typeName As String) As ObjectHandle
매개 변수
- assemblyName
- String
요청된 형식을 정의하는 어셈블리를 포함하는 파일의 이름입니다.
- typeName
- String
요청된 형식의 이름입니다.
반품
에 지정된 typeName새 인스턴스의 래퍼인 개체입니다. 실제 개체에 액세스하려면 반환 값을 래핑 해제해야 합니다.
예외
assemblyName 또는 typeName .입니다 null.
형식을 로드할 수 없습니다.
작업이 언로드된 애플리케이션 도메인에서 시도됩니다.
매개 변수가 없는 공용 생성자를 찾을 수 없습니다.
assemblyName 찾을 수 없습니다.
호출자는 상속 MarshalByRefObject되지 않는 개체에 대한 활성화 특성을 제공할 수 없습니다.
assemblyName 은 빈 문자열("")입니다.
assemblyName 가 유효한 어셈블리가 아닌 경우
어셈블리 또는 모듈이 두 개의 서로 다른 증명 정보로 두 번 로드되었습니다.
참조되는 COM 개체는 .입니다 null.
예제
다음 샘플에서는
using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::InteropServices;
[ComVisible(true)]
public ref class MyComVisibleType
{
public:
MyComVisibleType()
{
Console::WriteLine( "MyComVisibleType instantiated!" );
}
};
[ComVisible(false)]
public ref class MyComNonVisibleType
{
public:
MyComNonVisibleType()
{
Console::WriteLine( "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( "MyComNonVisibleType" ); // Fail!
CreateComInstance( "MyComVisibleType" ); // OK!
}
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 CreateComInstanceFromSnippet {
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);
}
}
}
open System
open System.Runtime.InteropServices
[<ComVisible true>]
type MyComVisibleType() =
do
printfn "MyComVisibleType instantiated!"
[<ComVisible false>]
type MyComNonVisibleType() =
do
printfn "MyComNonVisibleType instantiated!"
let createComInstance typeName =
try
let currentDomain = AppDomain.CurrentDomain
let assemblyName = currentDomain.FriendlyName
currentDomain.CreateComInstanceFrom(assemblyName, typeName)
|> ignore
with e ->
printfn $"{e.Message}"
createComInstance "MyComNonVisibleType" // Fail!
createComInstance "MyComVisibleType" // OK!
Imports System.Reflection
Imports System.Runtime.InteropServices
<ComVisible(True)> _
Class MyComVisibleType
Public Sub New()
Console.WriteLine("MyComVisibleType instantiated!")
End Sub
End Class
<ComVisible(False)> _
Class MyComNonVisibleType
Public Sub New()
Console.WriteLine("MyComNonVisibleType instantiated!")
End Sub
End Class
Module Test
Sub Main()
CreateComInstance("MyComNonVisibleType") ' Fail!
CreateComInstance("MyComVisibleType") ' OK!
End Sub
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
End Module 'Test
설명
이 메서드를 사용하여 형식을 로컬로 로드하지 않고도 개체를 원격으로 만들 수 있습니다.
실제 개체에 액세스하려면 반환 값을 래핑 해제해야 합니다.
System.Runtime.InteropServices.ComVisibleAttribute 값이 있는 특성은 명시적으로 또는 기본적으로 이 메서드가 해당 형식의 true 인스턴스를 만들려면 COM 형식에 적용해야 합니다. 그렇지 않으면 TypeLoadException throw됩니다.
추가 정보
적용 대상
CreateComInstanceFrom(String, String, Byte[], AssemblyHashAlgorithm)
지정된 COM 형식의 새 인스턴스를 만듭니다. 매개 변수는 형식과 형식의 이름을 포함하는 어셈블리를 포함하는 파일의 이름을 지정합니다.
public:
System::Runtime::Remoting::ObjectHandle ^ CreateComInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName, cli::array <System::Byte> ^ hashValue, System::Configuration::Assemblies::AssemblyHashAlgorithm hashAlgorithm);
public System.Runtime.Remoting.ObjectHandle CreateComInstanceFrom(string assemblyFile, string typeName, byte[] hashValue, System.Configuration.Assemblies.AssemblyHashAlgorithm hashAlgorithm);
member this.CreateComInstanceFrom : string * string * byte[] * System.Configuration.Assemblies.AssemblyHashAlgorithm -> System.Runtime.Remoting.ObjectHandle
Public Function CreateComInstanceFrom (assemblyFile As String, typeName As String, hashValue As Byte(), hashAlgorithm As AssemblyHashAlgorithm) As ObjectHandle
매개 변수
- assemblyFile
- String
요청된 형식을 정의하는 어셈블리를 포함하는 파일의 이름입니다.
- typeName
- String
요청된 형식의 이름입니다.
- hashValue
- Byte[]
계산된 해시 코드의 값을 나타냅니다.
- hashAlgorithm
- AssemblyHashAlgorithm
어셈블리 매니페스트에서 사용하는 해시 알고리즘을 나타냅니다.
반품
에 지정된 typeName새 인스턴스의 래퍼인 개체입니다. 실제 개체에 액세스하려면 반환 값을 래핑 해제해야 합니다.
예외
assemblyFile 또는 typeName .입니다 null.
형식을 로드할 수 없습니다.
작업이 언로드된 애플리케이션 도메인에서 시도됩니다.
매개 변수가 없는 공용 생성자를 찾을 수 없습니다.
assemblyFile 찾을 수 없습니다.
호출자는 상속 MarshalByRefObject되지 않는 개체에 대한 활성화 특성을 제공할 수 없습니다.
assemblyFile 는 빈 문자열("")입니다.
assemblyFile 가 유효한 어셈블리가 아닌 경우
어셈블리 또는 모듈이 두 개의 서로 다른 증명 정보로 두 번 로드되었습니다.
참조되는 COM 개체는 .입니다 null.
설명
이 메서드를 사용하여 형식을 로컬로 로드하지 않고도 개체를 원격으로 만들 수 있습니다.
실제 개체에 액세스하려면 반환 값을 래핑 해제해야 합니다.
System.Runtime.InteropServices.ComVisibleAttribute 값이 있는 특성은 명시적으로 또는 기본적으로 이 메서드가 해당 형식의 true 인스턴스를 만들려면 COM 형식에 적용해야 합니다. 그렇지 않으면 TypeLoadException throw됩니다.