IEnumerable.GetEnumerator()在Delphi 6中返回IEnumVariant

taf*_*afa 1 delphi com ienumerable .net-2.0

我通过COM在Delphi 6中使用.Net2.0程序集.其中一个接口中的一个方法返回IEnumerable.只要我导入位于的mscorlib.tlb

"C:\ WINDOWS\Microsoft.NET \框架\ V2.0.50727"

,我可以在Delphi 6中同时访问IEnumerable和IEnumerator接口.以下是在mscorlib_TLB.pas中定义IEnumerable的部分:

// *********************************************************************//
// Interface: IEnumerable
// Flags:     (4416) Dual OleAutomation Dispatchable
// GUID:      {496B0ABE-CDEE-11D3-88E8-00902754C43A}
// *********************************************************************//
  IEnumerable = interface(IDispatch)
    ['{496B0ABE-CDEE-11D3-88E8-00902754C43A}']
    function GetEnumerator: IEnumVARIANT; safecall;
  end;
Run Code Online (Sandbox Code Playgroud)

GetEnumerator方法的返回值不是IEnumerator,当我尝试将其强制转换为IEnumerator时,"不支持接口"会抛出异常.

以前有人遇到过这个或类似的问题吗?怎么解决?

cas*_*One 6

这是通过COM interop与.NET对象交互时的标准行为,如下所示:

http://msdn.microsoft.com/en-us/library/111chfb8(VS.71).aspx