2009-10-27 35 views
0

我在Delphi 7中使用COM,這是在C#中創建的,並且類的一個方法返回一個類型的數組。但是,當Delphi導入它時,而不是這種類型的數組,我得到PSafeArray如何將PSafeArray項目轉換爲原始類型

我怎樣才能施放該陣列的物品放入其基本類型?

我試着使用SafeArrayGetElement但我找不到鑄造項目到其原始類型的方式。

回答

0

我不知道究竟德爾福是如何處理的類型庫的解釋,但SAFEARRAY都有相應的類型。

如果您可以查看C#程序集的類型庫,你也許可以從那裏蒐集的基礎類型。

如果沒有,你可以調用SafeArrayGetVarType陣列上在運行時獲得其相關聯的類型(這對一些API創建SAFEARRAY小號的問題,雖然如此,你可能會得到垃圾回來。)

然而,最有可能的是,它被暴露爲SAFEARRAYVARIANT,其中每個項目都是「動態」類型的。

你知道,如果你能在Delphi程序VARIANT S'

+0

是的Delphi可以處理變體。 真正的問題是,我知道這個類型,但是當我試圖將它投入它時,拋出了一個異常。 我認爲所有的問題是因爲類型是在COM內部定義的。 – 2010-02-08 16:31:57

+0

我想知道/ cast /不是這樣做的方式。或者說,從變體中獲取價值的一般機制? – 2010-02-08 21:07:45

1

我不知道爲什麼你需要做任何造型爲SafeArrayGetElement會爲你。舉例:

var 
    Scope : ICOMScope; 
    LBound, UBound, I : Integer; 
begin 
    SafeArrayGetLBound(fMyComObject.Scopes, 1, LBound); 
    SafeArrayGetUBound(fMyComObject.Scopes, 1, HBound); 
    for i := lBound to Hbound do 
    begin 
    SafeArrayGetElement(fMyComObject.Scopes, i, Scope); 
    //do something with scope 
    end; 
end; 
相關問題