我在COM
中使用Delphi 7
,C#
在PSafeArray
中创建,其中一个方法返回一个类型的数组。但是,当Delphi导入它时,而不是该类型的数组,我得到SafeArrayGetElement
。
如何将该数组的项目转换为其基类型?
我尝试使用{{1}},但我找不到将项目转换为原始类型的方法。
答案 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
?