如何将PSafeArray项目转换为原始类型

问题描述:

我在Delphi 7中使用COM,这是在C#中创建的,并且类的一个方法返回一个类型的数组。但是,当Delphi导入它时,而不是这种类型的数组,我得到PSafeArray如何将PSafeArray项目转换为原始类型

我怎样才能施放该阵列的物品放入其基本类型?

我试着使用SafeArrayGetElement但我找不到铸造项目到其原始类型的方式。

我不知道究竟德尔福是如何处理的类型库的解释,但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

我不知道为什么你需要做任何造型为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;