2014-08-28 665 views
2

在Delphi 7:德爾福7 __ArrayList

我如何閱讀在C#中做了一個COM DLL返回一個數組列表?

我嘗試這樣做:

var 
    products: IList; 
begin 
    products := MyClass.Products() as IList; 
    //... 
end; 

這種模式在文檔recomended,但在Delphi 7,我不能申請for或while或任何對我的產品變量。

我的意圖是讀取結果並將其存儲在我的樹視圖中。

我該怎麼做?

注意:IList的是從mscorlib_TLB.pas推導,顯然在Delphi 7沒有辦法掃或算作在最近德爾福

版本
+0

'Count'屬性應該從['ICollection']繼承(http://msdn.microsoft.com/zh-cn/library/system.collections.icollection%28v=vs.110%29.aspx )接口,所以我認爲'(Products爲ICollection).Count'應該給你元素數。其餘的可能是索引['Item'](http://msdn.microsoft.com/en-us/library/system.collections.ilist.item%28v=vs.110%29.aspx)屬性。我的意思是[像這樣]](http://pastebin.com/VFp3ndz9)。 – TLama 2014-08-28 17:06:46

+2

爲什麼不讓這個答案TLama?然後不需要pastebin – 2014-08-28 17:14:55

回答

1

隨着你叫GetEnumeratorIList發生,從IEnumerable繼承接口,獲取一個IEnumerator接口並對其進行迭代。在僞代碼:

enumerator := products.GetEnumerator; 
while enumerator.MoveNext do 
    DoStuff(enumerator.Current); 

我想你需要投Current在您的代碼更有用的東西。如@TLama所述,您還可能需要將IList轉換爲IEnumerable

+1

如果您導入mscorlib類型庫,您會看到'IList'從'IDispatch'繼承。這就是爲什麼我建議'如同演員一樣。 – TLama 2014-08-29 04:23:20

+0

好吧,它是僞代碼。我想如果你需要更多的幫助,你需要準確解釋你的代碼是什麼樣的,什麼「不起作用」的意思。 – 2014-09-01 12:01:31

+0

謝謝@DavidHeffernan先生。我知道這是一個僞代碼。我正在閱讀文檔並試圖遵循你的推理。 – ECC 2014-09-01 12:05:00