IEnumerable.GetEnumerator () возвращает IEnumVariant в Delphi 6 - PullRequest
1 голос
/ 25 марта 2009

Я использую сборку .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, выдается исключение «Интерфейс не поддерживается».

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

Ответы [ 2 ]

6 голосов
/ 25 марта 2009

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

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

2 голосов
/ 25 марта 2009

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

...