图文手把手教你一步步用 VC++2010 编写通
达信缠论插件(1-DLL 设计入门)
按照图文提示,一步步往下走,按照说明,创建 VC++2010 工程,把
文中的代码拷贝到文中说明的位置,编译运行,绝对通过!
本篇免收下载券。后面的要收了,但是,收也收很少,顶多收你一个
下载券,我心不贪,请大家支持点儿。
本来都是玩儿的,但是,我下载别人的资料,也要下载券啊!同志们,
别骂我。
深谷老榆制作,2016.4.24
第一步、从“文件”菜单中,选择“新建”,然后选择“项目…”。
这时候弹出“新建项目”窗口,从“项目类型”窗格中选择“Win32 项目”,并填写工程名
称,自己命名,我这里是 ChanLunTdx。
点击“确定”按钮,出现下面“Win32 应用程序向导”窗口:
点击“下一步”按钮,出现“应用程序设置”窗口。
“应用程序类型”选择“DLL”,然后单击“完成”按钮。程序框架基本搭成。
第二步、双击“解决方案资源管理器”中“源文件”中的 dllmain.cpp 文件,按照下图所示
删掉无用代码:
则 dllmain.cpp 文件内容如下所示:
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
}
return TRUE;
第三步、鼠标右键单击工程名,出现一个弹出窗口,选择“添加(D)”下“新建项(W)...”:
点击后出现“添加新项”窗口,在其中选择“头文件(.h)”,下面文件名选择“ChanLunTdx”,
单击下面“添加”按钮:
把下面代码拷贝进去:
// ChanLunTdx.h : 定义 DLL 应用程序的导出函数。
//
#ifndef __CHANLUNTDX_H__
#define __CHANLUNTDX_H__
//#include "PluginTCalcFunc.h"
//======================================
#pragma pack(push,1)
//函数(数据个数,输出,输入 a,输入 b,输入 c)
typedef void(*pPluginFUNC)(int,float*,float*,float*,float*);
//PluginTCalcFuncInfo 结构用来存放用户自己的函数 pCallFunc 和函数唯一标记 nFuncMark;
//pCallFunc 是 typedef void(*pPluginFUNC)(
int DataLen,float* pfOUT,float* pfINa,float*
pfINb,float* pfINc)类型指针;
//函数参数分别是(数据个数,输出,输入 a,输入 b,输入 c),参数的计算是基于长度为 DataLen 的
float 类型数组。
typedef struct tagPluginTCalcFuncInfo
{
unsigned short
pPluginFUNC
}PluginTCalcFuncInfo;
nFuncMark;//函数编号
pCallFunc;//函数地址
//RegisterTdxFunc 函数为注册函数,用户的函数全部都放入 PluginTCalcFuncInfo 结构的全局
数组 g_CalcFuncSets 中。
typedef BOOL(*pRegisterPluginFUNC)(PluginTCalcFuncInfo**);
#pragma pack(pop)
//=======================================
#ifdef __cplusplus
extern "C"
{
#endif //__cplusplus
__declspec(dllexport) BOOL RegisterTdxFunc(PluginTCalcFuncInfo** pFun);
#ifdef __cplusplus
}
#endif //__cplusplus
#endif //__TCALC_FUNC_SETS
第四步、双击“解决方案资源管理器”中“源文件”中的 ChanLunTdx.cpp 文件,把下面代
码全部拷贝进去:
// ChanLunTdx.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#include "ChanLunTdx.h"
//生成的 dll 及相关依赖 dll 请拷贝到通达信安装目录的 T0002/dlls/下面,再在公式管理器进行
绑定
//函数: EMA(X,N)
//说明: 指数平滑移动平均 卖一价求指数平滑移动平均。
//用法: EMA(X,N),求 X 的 N 日指数平滑移动平均。
//算法: 若 Y=EMA(X,N) 则 Y=[2*X+(N-1)*Y']/(N+1),其中 Y'表示上一周期 Y 值。
//例如: EMA(CLOSE,30)表示求 30 日指数平滑均价
//通达信中用的时候,第一个输入参数是收盘价,第 2 个输入参数是常量,第三个输入参数
为空;
void EMA(int DataLen,float* pfOUT,float* pfINa,float* pfINb,float* pfINc)
{
float fTemp=0.0;
int N = int(*pfINb);
pfOUT[0] = 0.0;
for(int i=1;i