Sdílet prostřednictvím


AppDomain.CreateComInstanceFrom Metoda

Definice

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.

Viz také

Platí pro