我正在尝试实现一个打算在.NET和COM(Windows Script Host)环境中使用的类型集合。
MSDN声明必须实现IEnumerable才能使VB / VBS For Each语句可以访问集合:
[ComVisible]
[Guid]
interface IMyCollection : IEnumerable
{
new IEnumerator GetEnumerator(); // required because of well-known COM interop inheritance issue
}
这在VBScript / JScript中运行良好,但对于CLR / C#foreach语句,此集合似乎是无类型的。
试图使集合界面强类型如下。现在该集合在C#中完美运行但在VB中引发错误,因为TLB中缺少_NewEnum方法(带有id(-4))
[ComVisible]
[Guid]
interface IMyCollection : IEnumerable<IMyItem>
{
}
以下代码在VBScript中正常工作,但再次为.NET客户端设置了无类型的集合:
[ComVisible]
[Guid]
interface IMyCollection : IEnumerable<IMyItem>
{
new IEnumerator GetEnumerator();
}
还尝试通过返回实现System.Runtime.InteropServices.ComTypes.IEnumVARIANT
但没有成功的对象来手动实现_NewEnum。方法通过tlbexp实用程序导出到TLB,但根本没有MIDL id属性。
我怎么解决这个问题?
答案 0 :(得分:0)
你有没有尝试制作IMyItem&#34; ComVisible&#34;?如果它不是ComVisible,我想IMyItem将被识别为无类型的VARIANT。