0

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

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

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

4

2 回答 2

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;
于 2011-03-25T16:34:20.763 回答
0

我不确切知道 Delphi 如何处理类型库解释,但 aSAFEARRAY有一个关联的类型。

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

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

但是,最有可能的是,它被暴露为SAFEARRAY每个VARIANT项目都是“动态”类型的地方。

不知道VARIANT在Delphi中能不能处理s?

于 2010-02-08T14:02:03.980 回答