如何在C#创建对象?(How to CreateObject in C#?)

2019-06-26 19:38发布

我想翻译下面的VB6代码到C#

If optHost(0).Value Then
   Set m_oScpiAccess = New IcSCPIActiveX.IcSCPIAccess
Else
   sHost = txtHost.Text
   Set m_oScpiAccess = CreateObject("Exfo.IcSCPIActiveX.IcSCPIAccess", sHost)
End If

我用TLBIMP.EXE以创建COM类包装,和我尝试:

if (string.IsNullOrEmpty(host))
{
   // this works
   IcSCPIAccess = new IcSCPIAccess();
}
else
{
   // throws MissingMethodException
   IcSCPIAccess = (IcSCPIAccess)Activator.CreateInstance(
       typeof(IcSCPIAccessClass),
       host);
}

但没有构造函数接受host参数

Answer 1:

这不是一个构造函数调用。 所述sHost变量包含一个机器的名称,提供进程外-COM服务器之一。 等效功能由Type.GetTypeFromProgId()提供,使用允许指定服务器名称的过载:

  var t = Type.GetTypeFromProgID("Exfo.IcSCPIActiveX.IcSCPIAccess", sHost, true);
  obj = (IcSCPIAccess)Activator.CreateInstance(t);

我把它命名为“目标文件”,也避免给变量名称相同的接口类型。 一个极大的事情还是会出错,具有COM服务器正确的客户端和服务器计算机上都注册并正确设置DCOM安全性是至关重要的,以使此代码工作。 直到你确信原来的代码工作正常,不要尝试。



文章来源: How to CreateObject in C#?