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

时间:2009-10-27 13:35:09

标签: c# delphi com delphi-7

我在COM中使用Delphi 7C#PSafeArray中创建,其中一个方法返回一个类型的数组。但是,当Delphi导入它时,而不是该类型的数组,我得到SafeArrayGetElement

如何将该数组的项目转换为其基类型?

我尝试使用{{1}},但我找不到将项目转换为原始类型的方法。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

我不确切知道Delphi如何处理类型库解释,但SAFEARRAY具有关联类型。

如果您可以查看C#程序集的类型库,您可以从那里收集基础类型。

如果没有,您可以在数组上调用SafeArrayGetVarType以在运行时获取其关联类型(但是在某些API创建的SAFEARRAY上存在问题,因此您可能会遇到垃圾背面。)

但最有可能的是,它是SAFEARRAY的{​​{1}},其中每个项目都属于“动态”类型。

您知道是否可以在Delphi中处理VARIANT