【发布时间】:2011-01-11 10:58:29
【问题描述】:
一个类型库是从 C# 创建的,并在 Delphi 5 中使用。
类型库中有一个方法返回一个数组或字符串。在 Delphi 中我必须得到相同的字符串数组,但是当我编译代码时出现以下错误。
Incompatible types: 'tagSAFEARRAY' and 'Array'
这里是 C# 代码
public int[] sqrRootUpto(int num)
{
int[] result={0};
int tempVal=0;
for (int i = 2; num < tempVal; i++)
{
tempVal = i * i;
result[i] = tempVal;
}
return result;
}
这是 Delphi 代码,我在其中调用上述函数。
procedure TForm1.BtnSqrtClick(Sender: TObject);
var
num :Integer;
result : array of Integer;
begin
num := StrToInt(EditSqrtInput.text);
result := newObj.sqrRootUpto(num); //Here I am calling the above method
end;
end.
编辑
var
result : variant;
begin
result := VarArrayCreate([0, 20], varInteger);
Error!! Incompatible types: 'tagSAFEARRAY' and 'Array'
具有此函数签名的 TBL.pas
function TMathClass.sqrRootUpto(rNum: Integer): PSafeArray;
begin
Result := DefaultInterface.sqrRootUpto(rNum);
end;
什么是 B/w TSafeArray 和 TSafeArray 的区别
【问题讨论】:
-
我认为第一步是研究我认为存在于 ActiveX.pas 中的 tadSAFEARRAY、TSafeArray 等的定义。我相信这些是要与 Variant 数组一起使用的。我还认为您的真实示例更复杂,因为这对于 Delphi 中的代码来说是微不足道的。
-
我也使用了 aavriant 数组,但无法获取。
-
什么是 diff b/w TSafeArray 和 TSafeArray ?我认为您的意思是 TSafeArray 和 PSafeArray。 PSafeArray 是指向 TSafeArray 结构的指针。
-
尝试分配 TSafeArray 是没有用的,因为它是从 C# 代码返回的。分配一个动态整数数组并通过引用将其传递到 C# 例程并以这种方式编组会容易得多。由于您知道数组需要多大,因此只需稍加改动即可实现。
标签: c# delphi object delphi-2010 pascal