我在Delphi 7
中使用COM
,這是在C#
中創建的,並且類的一個方法返回一個類型的數組。但是,當Delphi導入它時,而不是這種類型的數組,我得到PSafeArray
。如何將PSafeArray項目轉換爲原始類型
我怎樣才能施放該陣列的物品放入其基本類型?
我試着使用SafeArrayGetElement
但我找不到鑄造項目到其原始類型的方式。
我在Delphi 7
中使用COM
,這是在C#
中創建的,並且類的一個方法返回一個類型的數組。但是,當Delphi導入它時,而不是這種類型的數組,我得到PSafeArray
。如何將PSafeArray項目轉換爲原始類型
我怎樣才能施放該陣列的物品放入其基本類型?
我試着使用SafeArrayGetElement
但我找不到鑄造項目到其原始類型的方式。
我不知道究竟德爾福是如何處理的類型庫的解釋,但SAFEARRAY
都有相應的類型。
如果您可以查看C#程序集的類型庫,你也許可以從那裏蒐集的基礎類型。
如果沒有,你可以調用SafeArrayGetVarType
陣列上在運行時獲得其相關聯的類型(這對一些API創建SAFEARRAY
小號的問題,雖然如此,你可能會得到垃圾回來。)
然而,最有可能的是,它被暴露爲SAFEARRAY
的VARIANT
,其中每個項目都是「動態」類型的。
你知道,如果你能在Delphi程序VARIANT
S'
我不知道爲什麼你需要做任何造型爲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;
是的Delphi可以處理變體。 真正的問題是,我知道這個類型,但是當我試圖將它投入它時,拋出了一個異常。 我認爲所有的問題是因爲類型是在COM內部定義的。 – 2010-02-08 16:31:57
我想知道/ cast /不是這樣做的方式。或者說,從變體中獲取價值的一般機制? – 2010-02-08 21:07:45