Sdílet prostřednictvím


AppDomain.CreateComInstanceFrom Metoda

Definice

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

ObjectHandle

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

ObjectHandle

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.

Viz také

Platí pro