编辑:我找到了关于 C# 和 COM 的相关页面:C# 编译器如何检测 COM 类型?
如标题所示,当我将 C# 中的程序转换为 IronPython 时,我无法创建类的实例。
原始 C# 程序:IAgilent34980A2 host = new Agilent34980A();
重写的 IronPython 程序:host = Agilent34980A()
C# 程序运行良好,而 IronPython 程序出现以下错误:
类型错误:无法创建 Agilent34980A 的实例,因为它是抽象的
实际上 Agilent34980A() 是一个接口,所以错误是合理的。
我的问题是为什么它在 C# 中有效?实例也不能在作为接口的 C# 中创建,对吧?
添加:
C# 代码来自测试机标记。
IAgilent34980A2 源代码定义部分如下:
使用 Ivi.Driver.Interop;
使用系统;
使用 System.Runtime.InteropServices;
命名空间 Agilent.Agilent34980A.Interop
{
// IAgilent34980A interface. [TypeLibType(256)] [Guid("07678A7D-048A-42A6-8884-6CC8C575BD1F")] [InterfaceType(1)] public interface IAgilent34980A2 : IIviDriver { IAgilent34980AMeasurement Measurement { get; } IAgilent34980AVoltage Voltage { get; } // There are some similar functions following. }
}
Agilent34980A 定义部分
使用 System.Runtime.InteropServices;
命名空间 Agilent.Agilent34980A.Interop
{
// Agilent34980A driver class. [Guid("07678A7D-048A-42A6-8884-6CC8C575BD1F")] [CoClass(typeof(Agilent34980AClass))] public interface Agilent34980A : IAgilent34980A2 { }
}
和 IIviDriver 定义部分
使用系统;
使用 System.Runtime.InteropServices;
命名空间 Ivi.Driver.Interop
{
// IVI Driver root interface [TypeLibType(256)] [InterfaceType(1)] [Guid("47ED5184-A398-11D4-BA58-000064657374")] public interface IIviDriver { // Pointer to the IIviDriverOperation interface [DispId(1610678272)] IIviDriverOperation DriverOperation { get; } // Pointer to the IIviDriverIdentity interface [DispId(1610678273)] IIviDriverIdentity Identity { get; } // There are some similar functions following. }