如何将PSafeArray项目转换为原始类型
问题描述:
我在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