我正在使用一个COM
在Delphi 7
其中创建的 in,C#
并且一个类的方法之一返回一个类型的数组。但是,当 Delphi 导入它时,我得到的不是该类型的数组,而是PSafeArray
.
如何将该数组的项目转换为其基本类型?
我尝试过使用SafeArrayGetElement
,但找不到将项目转换为原始类型的方法。
我不确定你为什么需要像 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 如何处理类型库解释,但 aSAFEARRAY
有一个关联的类型。
如果您可以查看 C# 程序集的类型库,您可能可以从那里收集基础类型。
如果没有,您可以SafeArrayGetVarType
在运行时调用数组以获取其关联类型(SAFEARRAY
不过,这在某些 API 创建的 s 上存在问题,因此您可能会得到垃圾。)
但是,最有可能的是,它被暴露为SAFEARRAY
每个VARIANT
项目都是“动态”类型的地方。
不知道VARIANT
在Delphi中能不能处理s?