私は現在、C# API を COM で表示できるようにしようとしていますが、現在、GetEnumerator
継承も継承するクラスの非ジェネリック メソッドを COM で表示することに固執していIEnumerable<T>
ます。に別のメソッドを実装するとITestIEnumerable
、それが表示されます。GetEnumerator
リストから派生したクラスでは、非ジェネリック メソッドが表示されることもわかりました。
これが機能しない理由がよくわかりません。継承するクラスの特殊なケースのようですIEnumerable<T>
。VB6 で For Each コンストラクトを使用できるように、これを COM に公開する方法はありますか?
例えば
[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("Test")]
[Guid("1aa2bdec-0530-44e8-b62d-b75914a6de22")]
public class TestIEnumerable : ITestIEnumerable
{
#region IEnumerable<Item> Members
[ComVisible(false)]
public IEnumerator<Item> GetEnumerator()
{
return _collection.GetEnumerator();
}
#endregion
#region ITestIEnumerable Members
[DispId(-4)]
[ComVisible(true)]
IEnumerator ITestIEnumerable.GetEnumerator()
{
return _collection.GetEnumerator();
}
#endregion
#region IEnumerable Members
[DispId(-4)]
[ComVisible(true)]
IEnumerator IEnumerable.GetEnumerator()
{
return _collection.GetEnumerator();
}
#endregion
}
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("187f3fed-9d4a-4a52-9a7c-a2fdeb56b9fa")]
[ComImport]
public interface ITestIEnumerable : IEnumerable<Item>
{
[DispId(-4)]
[ComVisible(true)]
new IEnumerator GetEnumerator();
}