AppDomain.CreateComInstanceFrom Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vytvoří novou instanci určeného typu COM.
Přetížení
CreateComInstanceFrom(String, String) |
Vytvoří novou instanci určeného typu COM. Parametry určují název souboru, který obsahuje sestavení obsahující typ a název typu. |
CreateComInstanceFrom(String, String, Byte[], AssemblyHashAlgorithm) |
Vytvoří novou instanci určeného typu COM. Parametry určují název souboru, který obsahuje sestavení obsahující typ a název typu. |
CreateComInstanceFrom(String, String)
Vytvoří novou instanci určeného typu COM. Parametry určují název souboru, který obsahuje sestavení obsahující typ a název typu.
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
Parametry
- assemblyName
- String
Název souboru obsahujícího sestavení, které definuje požadovaný typ.
- typeName
- String
Název požadovaného typu.
Návraty
Objekt, který je obálkou pro novou instanci určenou .typeName
Přístup k reálnému objektu lze zajistit pouze pomocí nezabalené návratové hodnoty.
Výjimky
assemblyName
nebo typeName
je null
.
Typ nelze načíst.
Dojde k pokusu o operaci na uvolněné doméně aplikace.
Nebyl nalezen žádný veřejný konstruktor bez parametrů.
assemblyName
nebyl nalezen.
typeName
je abstraktní třída.
-nebo-
Tento člen byl vyvolán pomocí mechanismu pozdní vazby.
Volající nemůže poskytnout aktivační atributy objektu, který nedědí z MarshalByRefObject.
assemblyName
je prázdný řetězec ("").
assemblyName
není platné sestavení.
Sestavení nebo modul byly zavedeny dvakrát se dvěma různými legitimacemi.
Objekt COM, na který se odkazuje, je null
.
Příklady
Následující ukázka ukazuje
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 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);
}
}
}
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
Poznámky
Pomocí této metody můžete vzdáleně vytvářet objekty, aniž byste museli načíst typ místně.
Vrácená hodnota musí být zrušena pro přístup k skutečnému objektu.
Atribut System.Runtime.InteropServices.ComVisibleAttribute s hodnotou true
musí být použit explicitně nebo ve výchozím nastavení na typ COM pro tuto metodu vytvořit instanci tohoto typu; jinak TypeLoadException je vyvolán.
Viz také
Platí pro
CreateComInstanceFrom(String, String, Byte[], AssemblyHashAlgorithm)
Vytvoří novou instanci určeného typu COM. Parametry určují název souboru, který obsahuje sestavení obsahující typ a název typu.
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
Parametry
- assemblyFile
- String
Název souboru obsahujícího sestavení, které definuje požadovaný typ.
- typeName
- String
Název požadovaného typu.
- hashValue
- Byte[]
Představuje hodnotu počítaného hash kódu.
- hashAlgorithm
- AssemblyHashAlgorithm
Představuje algoritmus hash používaný manifestem sestavení.
Návraty
Objekt, který je obálkou pro novou instanci určenou .typeName
Přístup k reálnému objektu lze zajistit pouze pomocí nezabalené návratové hodnoty.
Výjimky
assemblyName
nebo typeName
je null
.
Typ nelze načíst.
Dojde k pokusu o operaci na uvolněné doméně aplikace.
Nebyl nalezen žádný veřejný konstruktor bez parametrů.
assemblyFile
nebyl nalezen.
typeName
je abstraktní třída.
-nebo-
Tento člen byl vyvolán pomocí mechanismu pozdní vazby.
Volající nemůže poskytnout aktivační atributy objektu, který nedědí z MarshalByRefObject.
assemblyFile
je prázdný řetězec ("").
assemblyFile
není platné sestavení.
Sestavení nebo modul byly zavedeny dvakrát se dvěma různými legitimacemi.
Objekt COM, na který se odkazuje, je null
.
Poznámky
Pomocí této metody můžete vzdáleně vytvářet objekty, aniž byste museli načíst typ místně.
Vrácená hodnota musí být zrušena pro přístup k skutečnému objektu.
Atribut System.Runtime.InteropServices.ComVisibleAttribute s hodnotou true
musí být použit explicitně nebo ve výchozím nastavení na typ COM pro tuto metodu vytvořit instanci tohoto typu; jinak TypeLoadException je vyvolán.