IEnumerable.GetEnumerator() возвращает IEnumVariant в Delphi 6

Я использую сборку .Net2.0 в Delphi 6 через COM. Один из методов в одном из интерфейсов возвращает IEnumerable. Пока я импортирую mscorlib.tlb, расположенный в

"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"

, я могу получить доступ к интерфейсам IEnumerable и IEnumerator в Delphi 6. Вот часть, где IEnumerable определен в mscorlib_TLB.pas:

// *********************************************************************//
// 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;

Возвращаемое значение метода GetEnumerator не является IEnumerator, и когда я пытаюсь передать его в IEnumerator, возникает исключение «Интерфейс не поддерживается».

Кто-нибудь сталкивался с этой или похожей проблемой раньше? Как это можно решить?


person tafa    schedule 25.03.2009    source источник


Ответы (2)


Это стандартное поведение при взаимодействии с объектами .NET через COM-взаимодействие, как указано здесь:

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

person casperOne    schedule 25.03.2009

Ссылка на объяснение IEnumVARIANT в MSDN также может быть полезной: http://msdn.microsoft.com/en-us/library/ms221053.aspx

person Scott W    schedule 25.03.2009