共用方式為


AppDomain.CreateComInstanceFrom 方法

定義

建立指定 COM 類型的新實例。

多載

CreateComInstanceFrom(String, String)

建立指定 COM 類型的新實例。 參數會指定包含包含型別和型別名稱之元件的檔名。

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

建立指定 COM 類型的新實例。 參數會指定包含包含型別和型別名稱之元件的檔名。

CreateComInstanceFrom(String, String)

建立指定 COM 類型的新實例。 參數會指定包含包含型別和型別名稱之元件的檔名。

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

參數

assemblyName
String

包含定義所要求型別之元件的檔名。

typeName
String

要求型別的名稱。

傳回

物件,為 typeName所指定之新實例的包裝函式。 傳回值必須解除包裝,才能存取實際物件。

例外狀況

assemblyNametypeNamenull

無法載入類型。

在卸除的應用程式域上嘗試作業。

找不到公用無參數建構函式。

找不到 assemblyName

typeName 是抽象類。

-或-

這個成員是使用晚期綁定機制叫用的。

呼叫端無法為未繼承自 MarshalByRefObject的物件提供啟用屬性。

assemblyName 是空字串(“)。

assemblyName 不是有效的元件。

元件或模組已載入兩次,並具有兩個不同的辨識項。

參考的 COM 物件 null

範例

下列範例示範

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

備註

使用此方法從遠端建立物件,而不需要在本機載入類型。

傳回值必須解除包裝,才能存取實際物件。

具有 true 值的 System.Runtime.InteropServices.ComVisibleAttribute 屬性必須明確或預設套用至 COM 類型,這個方法才能建立該類型的實例;否則會擲回 TypeLoadException

另請參閱

適用於

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

建立指定 COM 類型的新實例。 參數會指定包含包含型別和型別名稱之元件的檔名。

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

參數

assemblyFile
String

包含定義所要求型別之元件的檔名。

typeName
String

要求型別的名稱。

hashValue
Byte[]

表示計算哈希碼的值。

hashAlgorithm
AssemblyHashAlgorithm

表示元件指令清單所使用的哈希演算法。

傳回

物件,為 typeName所指定之新實例的包裝函式。 傳回值必須解除包裝,才能存取實際物件。

例外狀況

assemblyFiletypeNamenull

無法載入類型。

在卸除的應用程式域上嘗試作業。

找不到公用無參數建構函式。

找不到 assemblyFile

typeName 是抽象類。

-或-

這個成員是使用晚期綁定機制叫用的。

呼叫端無法為未繼承自 MarshalByRefObject的物件提供啟用屬性。

assemblyFile 是空字串 (“)。

assemblyFile 不是有效的元件。

元件或模組已載入兩次,並具有兩個不同的辨識項。

參考的 COM 物件 null

備註

使用此方法從遠端建立物件,而不需要在本機載入類型。

傳回值必須解除包裝,才能存取實際物件。

具有 true 值的 System.Runtime.InteropServices.ComVisibleAttribute 屬性必須明確或預設套用至 COM 類型,這個方法才能建立該類型的實例;否則會擲回 TypeLoadException

另請參閱

適用於