Я пытаюсь вызвать DLL Delphi из Excel и вернуть столбец значений вариантов данных. У меня есть dll, возвращающий единственный shortstring, и это появляется в ячейке нормально. Теперь я пытаюсь вернуть столбец переменных значений. Он попадает в мой код в порядке, но массив в excel - все 0.Возвращение массива Excel из Delphi
Любые идеи очень ценятся.
Вот макрос регистрация в Excel: =REGISTER("c:\projects\test\delphixl.dll","GetPolicyData","KDD","GetPolicyData","Co,Pol",1,"Delphi")
Я не уверен, что 1 после параметров; Я не могу найти полную документацию в любом месте.
диапазон в Excel имеет: {=GetPolicyData(C1,D1)}
Ниже приведен код в D7. В соответствии с excel doc для функций регистра это выглядит нормально.
тип K данные
Тип данных К использует указатель на переменном размере структуру 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;
Вы уверены, что хотите больше всего использовать РЕГИСТРАТОР? –
Спасибо, за ваши ответы. Я перечитал документ и понял, что он только удваивает. Итак, теперь я заполняю таблицы SQL и имею их на листе в качестве подключения к данным. Я использую РЕГИСТР, поскольку это единственное, что я могу найти, чтобы вызвать DLL. Если есть другой способ, я все уши. Все это работает, за исключением того, что я не понял, как заставить регистр запускаться при запуске. Я не эксперт VBA, поэтому не понял, как это сделать в макросе автоматического запуска. Опять же, любые советы, принятые с уважением. –