編集:C#とCOMに関する相対ページを見つけました:C#コンパイラはCOMタイプをどのように検出しますか?
タイトルのように、C#のプログラムをIronPythonに変換しているときに、クラスのインスタンスを作成できませんでした。
元のC#プログラム:IAgilent34980A2 host = new Agilent34980A();
書き直されたIronPythonプログラム:host = Agilent34980A()
C#プログラムは正常に機能しますが、IronPythonプログラムは次のようなエラーを受け取ります。
TypeError:抽象的であるため、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. }