咨詢內(nèi)容:
library tdxdlltest;
{通達(dá)信dll公式函數(shù)規(guī)范 delphi版 2016.03.05 }
uses
SysUtils,Windows;
{$R *.res}
type
ArraySingle=array of single;
type
pPluginFUNC = procedure(p1: Integer; var p2, p3, p4, p5: ArraySingle); cdecl;
tagPluginTCalcFuncInfo = packed record
nFuncMark: Word;
pCallFunc: pPluginFUNC;
end;
PluginTCalcFuncInfo = tagPluginTCalcFuncInfo;
PPluginTCalcFuncInfo = ^PluginTCalcFuncInfo;
PPPluginTCalcFuncInfo = ^PPluginTCalcFuncInfo;
pRegisterPluginFUNC = function(pFun: PPPluginTCalcFuncInfo):LongBool;cdecl;
var
g_CalcFuncSets: array[0..2] of PluginTCalcFuncInfo;
procedure TestPlugin1(DataLen:integer;pfOUT:ArraySingle;pfINa:ArraySingle;pfINb:ArraySingle;pfINc:ArraySingle);cdecl;
var // F8F8F8F8 表示無(wú)效數(shù)據(jù),通達(dá)信公式中將不會(huì)顯示
i:integer;
pc1:PCardinal;
begin
for i:=0 to datalen-1 do
begin
pfOUT[i]:=pfina[i];
if i>=datalen-10 then
begin
pc1:=@pfout[i];
pc1^:=$F8F8F8F8;
end;
end;
end;
{通達(dá)信dll公式函數(shù)規(guī)范 delphi版 悟多qq911322 2016.03.05 }
procedure TestPlugin2(DataLen:integer;pfOUT:ArraySingle;pfINa:ArraySingle;pfINb:ArraySingle;pfINc:ArraySingle);cdecl;
var
i:integer;
begin
for i:=0 to datalen-1 do
begin
pfOUT[i]:=pfinb[i];
end;
end;
procedure TestPlugin3(DataLen:integer;pfOUT:ArraySingle;pfINa:ArraySingle;pfINb:ArraySingle;pfINc:ArraySingle);cdecl;
var
i:integer;
begin
for i:=0 to datalen-1 do
begin
pfOUT[i]:=pfinc[i];
end;
end;
procedure InitStruct;
begin
g_CalcFuncSets[0].nFuncMark := 1;
g_CalcFuncSets[0].pCallFunc := @TestPlugin1;
g_CalcFuncSets[1].nFuncMark := 2;
g_CalcFuncSets[1].pCallFunc := @TestPlugin2;
g_CalcFuncSets[2].nFuncMark := 3;
g_CalcFuncSets[2].pCallFunc := @TestPlugin3;
//有更多的函數(shù)的話,可以增加到這里
end;
function RegisterTdxFunc(pFun: PPPluginTCalcFuncInfo): LongBool; cdecl;
begin
Result := False;
if pFun^ = nil then
begin
pFun^ := @g_CalcFuncSets; //綁定dll函數(shù)起始地址
Result := True;
end;
end;
exports
RegisterTdxFunc;
begin
InitStruct;
end.