图文手把手教你一步步用VC++6.0编写大智慧365插件按照图文提示,一步步往下走,按照说明,创建VC++6.0工程,把文中的代码拷贝到文中说明的位置,编译运行,绝对通过!深谷老榆制作,2015.2.3本来都是玩儿的,但是为了挣点儿下载券啊,所以,同志们,我心不贪,就两个下载券,我不多要。第一步、File-New,在弹出的下面窗口中选择“Win32Dynamic-LinkLibrary”,并填写工程名称,自己命名,我这里是MyDzhDll。第二步、点击“OK”按钮,出现下面窗口:选择“AsimpleDLLproject”。点击“Finish”按钮。程序框架基本搭成。第三步、File-New,新建一个头文件DzhFunc.h,这是分析家的接口定义,最好原封不动地拷贝过来:#ifndef__DZHFUNC_H_#define__DZHFUNC_H_#includetime.h/*///////////////////////////////////////////////////////////////////////////大智慧扩展函数规范V1.101.本规范适用于大智慧1.10标准版和专业版公式系统.2.扩展函数用于实现系统函数不能实现的特殊算法.3.扩展函数用windows32位动态连接库实现,建议使用VC++6.0编程.4.调用时在公式编辑器中写动态库名称@函数名称(参数表)即可,见后面的例子5.动态连接库名称和函数名称可以自己定义.6.使用时可以将动态库拷贝到大智慧目录下使用.*/#ifdef__cplusplusexternC{#endif//_cplusplus/////////////////////////////////////////////////////////////////////////////分析周期enumDATA_TYPE{TICK_DATA=2,//分笔成交MIN1_DATA,//1分钟线MIN5_DATA,//5分钟线MIN15_DATA,//15分钟线MIN30_DATA,//30分钟线MIN60_DATA,//60分钟线DAY_DATA,//日线WEEK_DATA,//周线MONTH_DATA,//月线MULTI_DATA//多日线};/////////////////////////////////////////////////////////////////////////////基本数据typedefstructtagSTKDATA{time_tm_time;//时间,UCTfloatm_fOpen;//开盘floatm_fHigh;//最高floatm_fLow;//最低floatm_fClose;//收盘floatm_fVolume;//成交量floatm_fAmount;//成交额WORDm_wAdvance;//上涨家数(仅大盘有效)WORDm_wDecline;//下跌家数(仅大盘有效)}STKDATA;//////////////////////////////////////////////////////////////////////////////扩展数据,用于描述分笔成交数据的买卖盘typedefuniontagSTKDATAEx{struct{floatm_fBuyPrice[3];//买1--买3价floatm_fBuyVol[3];//买1--买3量floatm_fSellPrice[3];//卖1--卖3价floatm_fSellVol[3];//卖1--卖3量};floatm_fDataEx[12];//保留}STKDATAEx;//////////////////////////////////////////////////////////////////////////////*财务数据顺序(m_pfFinData内容)序号内容0总股本(万股),1国家股,2发起人法人股,3法人股,4B股,5H股,6流通A股,7职工股,8A2转配股,9总资产(千元),10流动资产,11固定资产,12无形资产,13长期投资,14流动负债,15长期负债,16资本公积金,17每股公积金,18股东权益,19主营收入,20主营利润,21其他利润,22营业利润,23投资收益,24补贴收入,25营业外收支,26上年损益调整,27利润总额,28税后利润,29净利润,30未分配利润,31每股未分配,32每股收益,33每股净资产,34调整每股净资,35股东权益比,36净资收益率*////////////////////////////////////////////////////////////////////////////////函数数据结构typedefstructtagCALCINFO{constDWORDm_dwSize;//结构大小constDWORDm_dwVersion;//调用软件版本(V2.10:0x210)constDWORDm_dwSerial;//调用软件序列号constchar*m_strStkLabel;//股票代码constBOOLm_bIndex;//大盘constintm_nNumData;//数据数量(pData,pDataEx,pResultBuf数据数量)constSTKDATA*m_pData;//常规数据,注意:当m_nNumData==0时可能为NULLconstSTKDATAEx*m_pDataEx;//扩展数据,分笔成交买卖盘,注意:可能为NULL//m_nParam1Start用以指出参数1是常量参数还是序列参数//若m_nParam1Start0,则参数1为常数参数,参数等于*m_pfParam1;//若m_nParam1Start=0,则参数1为序列数参数,m_pfParam1指向一个浮点型数组,//数组大小为m_nNumData,数据有效范围为m_nParam1Start--m_nNumData.//在时间上m_pData[x]与m_pfParam1[x]是一致的constintm_nParam1Start;//1.函数调用参数由m_pfParam1--m_pfParam4带入,若为NULL则表示该参数无效.//2.当一个参数无效时,则其后的所有参数均无效.//如:m_pfParam2为NULL,则m_pfParam3,m_pfParam4一定为NULL.//3.参数1可以是常数参数或序列数参数,其余参数只能为常数参数.constfloat*m_pfParam1;//调用参数1constfloat*m_pfParam2;//调用参数2constfloat*m_pfParam3;//调用参数3constfloat*m_pfParam4;//调用参数3//函数计算结果用pData-m_pResultBuf带回.float*m_pResultBuf;//结果缓冲区constDATA_TYPEm_dataType;//数据类型constfloat*m_pfFinData;//财务数据}CALCINFO;//////////////////////////////////////////////////////////////////////////*函数输出__declspec(dllexport)intxxxxxxxx(CALCINFO*pData);----------A__declspec(dllexport)intxxxxxxxxVAR(CALCINDO*pData);----------B1.函数名称需全部大写.2.函数必须以上述A,B两种形式之一声明,请用实际函数名称替代xxxxxxxx;对于C++程序还需包括在externC{}括号中.3.上述形式A用于声明不带参数或全部参数为常数的函数;形式B用于声明参数1为序列数的函数;两种函数的区别在于后者以VAR结尾.4.函数计算结果用pData-m_pResultBuf带回.5.函数返回-1表示错误或全部数据无效,否则返回第一个有效值位置,即:m_pResultBuf[返回值]--m_pResultBuf[m_nNumData-1]间为有效值.6.函数名称长度不能超过15字节,动态连接库文件名不能超过9字节(不包括扩展名),动态库名称不能叫SYSTEM,EXPLORER7.编译时请请选择1字节对齐*///示例函数,使用时用实际名称替换__declspec(dllexport)intWINAPIMYMACLOSE(CALCINFO*pData);__declspec(dllexport)intWINAPIMYMAVAR(CALCINFO*pData);__declspec(dllexport)intWINAPIMYMACLOSE_CALC_PREV(CALCINFO*pData);__declspec(dllexport)intWINAPIMYMAVAR_CALC_PREV(CALCINFO*pData);#ifdef__cplusplus}#endif//_cplusplus#endif//_DZHFUNC_H_第四步、打开MyDzhDll.cpp文件,修改DllMain函数如下所示,红字是添加的部分:BOOLAPIENTRYDllMain(HANDLEhModule,DWORDul_reason_for_call,LPVOIDlpReserved){switch(ul_reason_for_call){caseDLL_PROCESS_ATTACH:caseDLL_THREAD_ATTACH:caseDLL_THREAD_DETACH:caseDLL_PROCESS_DETACH:break;}returnTRUE;}第五步、把下面代码全部拷贝到MyDzhDll.cpp文件中去://计算收盘价的均价,一个常数参数,表示计算周期//调用时在公式编辑器中写动态库名称@函数名称(参数表),//例如:mydzhdll@mymaclose(10)/*注:1.函数调用参数由CALCINFO中的m_pfParam1--m_pfParam4带入,若为NULL则表示该参数无效.2.当一个参数无效时,则其后的所有参数均无效.如:m_pfParam2为NULL,则m_pfParam3,m_pfParam4一定为NULL.3.m_pfParam1可以是常数参数或序列数参数,其余参数只能为常数参数.4.若m_nParam1Start0,则参数1为常数参数,参数等于*m_pfParam1;5.若m_nParam1Start=0,则参数1为序列数参数,m_pfParam1指向一个浮点型数组,数组大小为m_nNumData,数据有效范围为m_nParam1Start--m_nNumData.在时间上m_pData[x]与m_pfParam1[x]是一致的*///----------------------------函数MA(N)--------------------------//这是一个求N日收盘平均价的函数,参数N将从m_pfParam1中传入//用法:MA(N),求某量X的N日简单移动平均值。//算法:(X1+X2+X3+...+Xn)/N//例如:MA(20)表示求20日均价//求哪个量的N日平均?结构指针STKDATA*m_pData的成员m_fClose。//使用方式MyDzhDll@MYMACLOSE(5)//-----------------------------函数源码----------------------------__declspec(dllexport)intWINAPIMYMACLOSE(CALCINFO*pData){floatf,fTotal;intnPeriod,i,j;if(pData-m_pfParam1&&//参数1有效pData-m_nParam1Start0&&//参数1为常数pData-m_pfPa