|
PluginTCal*Fnc.h头文件中PluginTCal*FncInfo结构用来存放用户自己的函数pCallFunc和函数唯一标记nFuncMark;pCallFunc是typedef void(*pPluginFUNC)( intDataLen,float* pfOUT,float* pfINa,float* pfINb,float* pfINc)类型指针;函数参数分别是(数据个数,输出,输入a,输入b,输入c),参数的计算是基于长度为DataLen的float类型数组。 RegisterTdxFunc函数为注册函数,用户的函数全部都放入PluginTCal*FncInfo结构的全局数组g_Cal*FncSets中。
PluginTCal*Fnc.h
#ifndef __PLUGIN_TCALC_FUNC
#define __PLUGIN_TCALC_FUNC
#pragma pack(push,1)
//函数(数据个数,输出,输入a,输入b,输入c)
typedef void(*pPluginFUNC)(int,float*,float*,float*,float*);
typedef struct tagPluginTCal*FncInfo
{
unsigned short nFuncMark;//函数编号
pPluginFUNC pCallFunc;//函数地址
}PluginTCal*FncInfo;
typedef BOOL(*pRegisterPluginFUNC)(PluginTCal*FncInfo**);
#pragma pack(pop)
#endif
#include "stdafx.h"
#include "TCal*FncSets.h"
//生成的dll及相关依赖dll请拷贝到通达信安装目录的T0002/dlls/下面,再在公式管理器进行绑定
void TestPlugin1(int DataLen,float* pfOUT,float* pfINa,float* pfINb,float* pfINc)
{
for(int i=0;i<DataLen;i++)
pfOUT=i;
}
void TestPlugin2(int DataLen,float* pfOUT,float* pfINa,float* pfINb,float* pfINc)
{
for(int i=0;i<DataLen;i++)
{
pfOUT=pfINa+pfINb+pfINc;
pfOUT=pfOUT/3;
}
}
//加载的函数
PluginTCal*FncInfo g_Cal*FncSets[] =
{
{1,(pPluginFUNC)&TestPlugin1},
{2,(pPluginFUNC)&TestPlugin2},
{0,NULL},
};
//导出给TCalc的注册函数
BOOL RegisterTdxFunc(PluginTCal*FncInfo** pFun)
{
if(*pFun==NULL)
{
(*pFun)=g_Cal*FncSets;
return TRUE;
}
return FALSE;
}
|
|