龙空技术网

编写通达信DLL文件(以MA均线为例)

浅酒轻尝 4584

前言:

此刻各位老铁们对“易语言编写dll文件”大致比较关切,你们都需要分析一些“易语言编写dll文件”的相关资讯。那么小编也在网络上汇集了一些有关“易语言编写dll文件””的相关文章,希望大家能喜欢,我们快快来学习一下吧!

前一篇介绍DLL文件绑定,本篇简要说说DLL文件如何编写。DLL程序编写要求稍稍要高一些,需要懂一些编程语言,本篇以MFC为例需要有点C语言基础,本例比较简单。

通达信DLL链接库编写,首先是要搭框架,就是与通达信软件的接口处理;在通达信官网帮助页面可以下载《通达信DLL函数编程规范》,里面有一个WORD简要说明,与一个较老的实例。按说明与实例素材,搭好框架;编写代码就只需在框架内按要求增加功能性代码即可。

下面以编程环境用Visual Studio2017 MFC为例,写个简单的DLL实例。VS2017可以网络搜索下载破解版,此软件比较大需要10G+空间,实际以安装内容大小有不同,必须安装MFC组件。此处就不介绍软件安装,以安装好为例。

打开VS2017,文件——新建——项目,弹出如下图窗口,按图填写,项目名称可自定义,确定后弹出窗口再确定;新建项目完成。

新建项目

新建项目(MFC DLL)

完成项目新建

在新项目中任意打开一个文件,此处打开Dll_Demo.cpp,然后按下图,打开项目根目录。

打开文件所在位置

把《通达信DLL函数编程规范》内的PluginTCalcFunc.h头文件,复制粘贴到项目根目录。

编程规范头文件

粘贴头文件

在项目中添加PluginTCalcFunc.h头文件。下图中第③步点击现有项后,在弹出的窗口选择PluginTCalcFunc.h头文件,并确定添加。

添加资源

添加头文件

用记事本打开DLL编程规范里的TCalcFuncSets.h头文件,复制以下代码到PluginTCalcFunc.h头文件图示位置。

#ifdef __cplusplus

extern "C"

{

#endif //__cplusplus

__declspec(dllexport) BOOL RegisterTdxFunc(PluginTCalcFuncInfo** pFun);

#ifdef __cplusplus

}

#endif //__cplusplus

头文件粘贴代码

如上图2提示,鼠标移到第20行红色波浪线处右键弹出窗口,选择第一行快速操作与重构,再点击第一行创建CPP文件,如下图:

创建CPP文件

cpp文件

打开《通达信DLL函数编程规范》内的TCalcFuncSets.cpp文件,复制如以下到代码到刚新建的cpp文件,注意语句对齐:

//生成的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]=i;

}

void TestPlugin2(int DataLen,float* pfOUT,float* pfINa,float* pfINb,float* pfINc)

{

for(int i=0;i<DataLen;i++)

{

pfOUT[i]=pfINa[i]+pfINb[i]+pfINc[i];

pfOUT[i]=pfOUT[i]/3;

}

}

//加载的函数

PluginTCalcFuncInfo g_CalcFuncSets[] =

{

{1,(pPluginFUNC)&TestPlugin1},

{2,(pPluginFUNC)&TestPlugin2},

{0,NULL},

};

//导出给TCalc的注册函数

BOOL RegisterTdxFunc(PluginTCalcFuncInfo** pFun)

{

if(*pFun==NULL)

{

(*pFun)=g_CalcFuncSets;

return TRUE;

}

return FALSE;

}

如下图点击生成菜单,生成解决方案,编译通过且生成我们所需的DLL文件。至此框架搭完。此官方实例两个功能函数,一个是输出通达信每次读取多少根K线数据(此数据用户在通达信系统设置里可自定义,K线图缩到最少,输出的数据为总共K线根数);另一个函数输出为传入三个参数的均值。

搭框架完成

设置项目属性,然后重新编译生成Release版dll。

项目属性

生成Release版本

框架完成后,以后要编辑新的功能,只需要在PluginTCalcFunc.cpp中添加新的功能函数代码,并加入到g_CalcFuncSets[]数组,下面举例,把第一个函数更改为求取平均值,等下在通达信画平均线。

把第一个函数全部删除或修改为如下代码,同时修改加载函数那里第一个的名称,改为MA(如下图):

void MA(int DataLen, float* pfOUT, float* pfINa, float* pfINb, float* pfINc)

{//参数1传入收盘价;参数2传入均线周期

int N = int(*pfINb);

float sum;

for (int i = N - 1; i < DataLen; i++)

{

sum = 0;

for (int j = 0; j < N; j++)

sum = sum + pfINa[i - j];

pfOUT[i] = sum / N;

}

}

MA函数

编译通过,若有问题请检查是否按步骤没有错漏,如下图,在提示的路径文件夹中找到Dll_Demo.dll文件,复制到通达信安装路径下的\T0002\dlls,然后按上一篇文章绑定该DLL到第一号DLL。

绑定DLL

在通达信公式管理器中,新建如下图指标,就是调用dll画均线,同一个函数给不同均线周期即可画出不同的均线。

通达信tn6指标公式

测试公式通过后,主图调用该指标,成功画出三条均线

DLL画均线

这个过程说起来很复杂,明白了就很简单,以后要做的就是在框架内编辑不同的函数代码,根据个人C语言水平,编辑不同功能的股票函数。

过程中如有遗漏,可留言讨论,有其他更好的方法也请指正。

标签: #易语言编写dll文件 #c编写dll文件