我想将以下 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
范围
它不是构造函数调用。这sHost变量包含一台机器的名称,该机器提供进程外 COM 服务器。 Type.GetTypeFromProgId() 提供了等效的功能,使用允许指定服务器名称的重载:
var t = Type.GetTypeFromProgID("Exfo.IcSCPIActiveX.IcSCPIAccess", sHost, true);
obj = (IcSCPIAccess)Activator.CreateInstance(t);
我将其命名为“obj”,请避免给变量提供与接口类型相同的名称。无数的事情仍然可能会出错,在客户端和服务器计算机上正确注册 COM 服务器并正确设置 DCOM 安全性对于使此代码正常工作至关重要。在确定原始代码可以正常工作之前,请勿尝试此操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)