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 zadaného typu modelu COM.
Přetížení
CreateComInstanceFrom(String, String) |
Vytvoří novou instanci zadaného typu modelu 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 zadaného typu modelu COM. Parametry určují název souboru, který obsahuje sestavení obsahující typ a název typu. |
CreateComInstanceFrom(String, String)
Vytvoří novou instanci zadaného typu modelu 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álka pro novou instanci určenou typeName
. Aby bylo možné získat přístup k skutečnému objektu, musí být vrácená hodnota bez přepsání.
Výjimky
assemblyName
nebo typeName
je null
.
Typ nelze načíst.
Operace se pokusí o uvolněnou doménu 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 byl načten dvakrát se dvěma různými důkazy.
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 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
Poznámky
Pomocí této metody můžete vzdáleně vytvářet objekty bez nutnosti načíst typ místně.
Aby bylo možné získat přístup k skutečnému objektu, musí být vrácená hodnota.
Atribut System.Runtime.InteropServices.ComVisibleAttribute s hodnotou true
musí být použit explicitně nebo ve výchozím nastavení pro typ modelu COM pro tuto metodu, aby se vytvořila instance tohoto typu; jinak TypeLoadException je vyvolán.
Viz také
Platí pro
CreateComInstanceFrom(String, String, Byte[], AssemblyHashAlgorithm)
Vytvoří novou instanci zadaného typu modelu 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 vypočítaného kódu hash.
- hashAlgorithm
- AssemblyHashAlgorithm
Představuje hashovací algoritmus používaný manifestem sestavení.
Návraty
Objekt, který je obálka pro novou instanci určenou typeName
. Aby bylo možné získat přístup k skutečnému objektu, musí být vrácená hodnota bez přepsání.
Výjimky
assemblyFile
nebo typeName
je null
.
Typ nelze načíst.
Operace se pokusí o uvolněnou doménu 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 byl načten dvakrát se dvěma různými důkazy.
Objekt COM, na který se odkazuje, je null
.
Poznámky
Pomocí této metody můžete vzdáleně vytvářet objekty bez nutnosti načíst typ místně.
Aby bylo možné získat přístup k skutečnému objektu, musí být vrácená hodnota.
Atribut System.Runtime.InteropServices.ComVisibleAttribute s hodnotou true
musí být použit explicitně nebo ve výchozím nastavení pro typ modelu COM pro tuto metodu, aby se vytvořila instance tohoto typu; jinak TypeLoadException je vyvolán.