Partage via


AppDomain.CreateComInstanceFrom Méthode

Définition

Crée une instance d’un type COM spécifié.

Surcharges

CreateComInstanceFrom(String, String)

Crée une instance d’un type COM spécifié. Les paramètres spécifient le nom d’un fichier qui contient un assembly contenant le type et le nom du type.

CreateComInstanceFrom(String, String, Byte[], AssemblyHashAlgorithm)

Crée une instance d’un type COM spécifié. Les paramètres spécifient le nom d’un fichier qui contient un assembly contenant le type et le nom du type.

CreateComInstanceFrom(String, String)

Crée une instance d’un type COM spécifié. Les paramètres spécifient le nom d’un fichier qui contient un assembly contenant le type et le nom du type.

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

Paramètres

assemblyName
String

Nom d’un fichier contenant un assembly qui définit le type demandé.

typeName
String

Nom du type demandé.

Retours

Objet qui est un wrapper pour la nouvelle instance spécifiée par typeName. La valeur de retour doit être décompressée pour accéder à l’objet réel.

Exceptions

assemblyName ou typeName est null.

Impossible de charger le type.

L’opération est tentée sur un domaine d’application déchargé.

Aucun constructeur sans paramètre public n’a été trouvé.

assemblyName est introuvable.

typeName est une classe abstraite.

-ou-

Ce membre a été appelé avec un mécanisme de liaison tardive.

L’appelant ne peut pas fournir d’attributs d’activation pour un objet qui n’hérite pas de MarshalByRefObject.

assemblyName est une chaîne vide («  »).

assemblyName n’est pas un assembly valide.

Un assembly ou un module a été chargé deux fois avec deux preuves différentes.

L’objet COM auquel il est fait référence est null.

Exemples

L’exemple suivant illustre

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

Remarques

Utilisez cette méthode pour créer des objets à distance sans avoir à charger le type localement.

La valeur de retour doit être décompressée pour accéder à l’objet réel.

Un attribut System.Runtime.InteropServices.ComVisibleAttribute avec une valeur de true doit être appliqué explicitement ou par défaut au type COM pour cette méthode afin de créer une instance de ce type ; sinon, TypeLoadException est levée.

Voir aussi

S’applique à

CreateComInstanceFrom(String, String, Byte[], AssemblyHashAlgorithm)

Crée une instance d’un type COM spécifié. Les paramètres spécifient le nom d’un fichier qui contient un assembly contenant le type et le nom du type.

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

Paramètres

assemblyFile
String

Nom d’un fichier contenant un assembly qui définit le type demandé.

typeName
String

Nom du type demandé.

hashValue
Byte[]

Représente la valeur du code de hachage calculé.

hashAlgorithm
AssemblyHashAlgorithm

Représente l’algorithme de hachage utilisé par le manifeste d’assembly.

Retours

Objet qui est un wrapper pour la nouvelle instance spécifiée par typeName. La valeur de retour doit être décompressée pour accéder à l’objet réel.

Exceptions

assemblyFile ou typeName est null.

Impossible de charger le type.

L’opération est tentée sur un domaine d’application déchargé.

Aucun constructeur sans paramètre public n’a été trouvé.

assemblyFile est introuvable.

typeName est une classe abstraite.

-ou-

Ce membre a été appelé avec un mécanisme de liaison tardive.

L’appelant ne peut pas fournir d’attributs d’activation pour un objet qui n’hérite pas de MarshalByRefObject.

assemblyFile est la chaîne vide («  »).

assemblyFile n’est pas un assembly valide.

Un assembly ou un module a été chargé deux fois avec deux preuves différentes.

L’objet COM auquel il est fait référence est null.

Remarques

Utilisez cette méthode pour créer des objets à distance sans avoir à charger le type localement.

La valeur de retour doit être décompressée pour accéder à l’objet réel.

Un attribut System.Runtime.InteropServices.ComVisibleAttribute avec une valeur de true doit être appliqué explicitement ou par défaut au type COM pour cette méthode afin de créer une instance de ce type ; sinon, TypeLoadException est levée.

Voir aussi

S’applique à