System.AppDomain.CreateComInstanceFrom 方法 (String, String)

方法描述

创建指定 COM 类型的新实例。 形参指定文件的名称,该文件包含含有类型和类型名称的程序集。

语法定义(C# System.AppDomain.CreateComInstanceFrom 方法 (String, String) 的用法)

public ObjectHandle CreateComInstanceFrom(
	string assemblyName,
	string typeName
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
assemblyName System-String 文件的名称,该文件包含定义所请求的类型的程序集。
typeName System-String 所请求类型的名称。
返回值 System.Runtime.Remoting.ObjectHandle 一个对象,该对象是 typeName 指定的新实例的包装。 需要打开包装才能访问真实对象。

提示和注释

使用此方法可远程创建对象,而无需本地加载该类型。

返回值需要打开包装才能访问实际对象。

必须以显式方式或默认方式对 COM 类型应用值为 true 的 System.Runtime.InteropServices.ComVisibleAttribute 特性,这样,此方法才能创建该类型的实例;否则,会引发 TypeLoadException。

System.AppDomain.CreateComInstanceFrom 方法 (String, String)例子

下面的示例演示

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);
      }
   }
}

异常

异常 异常描述
ArgumentNullException assemblyName 或 typeName 为 null。
TypeLoadException 无法加载该类型。
AppDomainUnloadedException 尝试对已卸载的应用程序域进行操作。
MissingMethodException 未找到公共无形参构造函数。
FileNotFoundException 未找到 assemblyName。
MemberAccessException
  • typeName 是抽象类。
  • 用后期绑定机制调用该成员。
NotSupportedException 调用方无法为不是从 MarshalByRefObject 继承的对象提供激活特性。
ArgumentException assemblyName 为空字符串 ("")。
BadImageFormatException assemblyName 不是有效程序集。
FileLoadException 用两个不同的证据将一个程序集或模块加载了两次。
NullReferenceException 所引用的 COM 对象为 null。

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。