从Delphi返回Excel数组

我试图从Excel中调用一个Delphi DLL,并返回一列variables数据值。 我有DLL返回一个单一的短裤,并出现在一个单元格中。 现在我试图返回一列variables值。 它进入我的代码好,但在Excel中的数组是全0。

任何想法不胜感激。

这里是Excel中的macros注册: =REGISTER("c:\projects\test\delphixl.dll","GetPolicyData","KDD","GetPolicyData","Co,Pol",1,"Delphi")

我不确定参数之后是什么1; 我不能在任何地方find完整的文档。

Excel中的范围有: {=GetPolicyData(C1,D1)}

以下是D7中的代码。 根据注册函数的excel文件,这似乎是好的。

K数据types

K数据types使用指向可变尺寸FP结构的指针。 您必须在DLL或代码资源中定义此结构,如下所示:

 typedef struct _FP { unsigned short int rows; unsigned short int columns; double array[1]; /* Actually, array[rows][columns] */ } FP; Type pPolicyData = ^tPolicyData; tPolicyData = Record Rows: word; Cols: word; data: variant; End; var pd: tPolicyData; Function GetPolicyData(co: pShortString; pol: pShortString): pPolicyData; Stdcall; Var polc: tpolcmst; Begin lpro := tlifepro.create; lpro.opendatabases; polc := tpolcmst.create(lpro); Try polc.read(co^, pol^); pd.Rows := 2; pd.Cols := 1; pd.data := VarArrayCreate([0, 1], varVariant); pd.data[0] := datetostr(polc.issuedate); pd.data[1] := format('%.2f', [polc.modepremium]); result := addr(pd); Finally lpro.closedatabases; freeit(lpro); End; End; 

您已经将FPlogging( TPolicyData )的数据成员声明为Variant 。 应该声明为Double ,它应该是所需维度的数组。

在这种情况下,行数= 2和列数= 1:

 TPolicyData = record Rows: word; Cols: word; data: array[0..1] of Double; End; 

如果行和列是dynamic的,则需要计算FPlogging所需的内存并dynamic分配。 所需的内存将是:

  2 bytes for "Rows" word + 2 bytes for "Cols" word + Rows x Cols x 8 bytes for "data" array of Doubles 

在Delphi 7中,您将需要使用指针偏移量将数据分配给数组内的单个Double元素。

但是,由于您没有提到需要处理不同的行和列,所以我不再详细讨论,因为它可能是多余的。