有会c++的童鞋没,小弟有个小问题咨询一下。
  • 浏览:484 评论:3 人

  • 这段语句是要做一个股票软件的mfc dll
    具体内容是画一个函数图像
    软件头文件架构已经有了 在下楼 不知道我这个架构符合不 有能看懂的不?
    另外这里头有些代码错误 能否修改一下?
    希望好心人能帮这个忙。错误语句是几个数学函数


    #include "stdafx.h"
    #include "PluginTCalcFunc.h"


    BOOL RegisterTdxFunc(PluginTCalcFuncInfo ** pFun)
    {
    return 0;
    }
    #include "stdafx.h"


    double Weierstrass(double*Vect, int N) {
    static const double a = 0.5, b = 3;
    static int kmax = 20;
    int i, j;
    double dat = 0, result = 0;
    for (i = 0; i <= kmax; i++) {
    for (j = 0; j<N; j++)
    result += pow(a, i)*cos(2 * pi*pow(b, i)*(Vect[j] + 0.5));
    dat += pow(a, i)*cos(2 * pi*pow(b, i)*0.5);


    }




    result -= N*dat;


    return result;


    }


    // Fast version (N = 100)
    double weierstrass_Fast(double*Vect) {


    static const double alist[] = {
    1.0000e+0, 5.0000e-1,2.5000e-1,1.2500e-1,6.2500e-2,3.1250e-2,1.5625e-2,
    7.8125e-3, 3.9063e-3,1.9531e-3,9.7656e-4,4.8828e-4,2.4414e-4,1.2207e-4,
    6.1035e-5, 3.0518e-5,1.5259e-5,7.6294e-6,3.8147e-6,1.9073e-6,9.5367e-7


    };
    static const double blist[] = {


    1.0000e+0,3.0000e+0,9.0000e+0,2.7000e+1,8.1000e+1,2.4300e+2,7.2900e+2,
    2.1870e+3,6.5610e+3,1.9683e+4,5.9049e+4,1.7715e+5,5.3144e+5,1.5943e+6,
    4.7830e+6,1.4349e+7,4.3047e+7,1.2914e+8,3.8742e+8,1.1623e+8,3.4868e+9


    };
    static const int kmax = 20;
    int i, j;
    double dat = 0, result = 0, twopi = 2 * pi;


    for (i = 0; i <= kmax; i++) {


    for (j = 0; j<100; j++)
    result += alist * cos(twopi*blist * (Vect[j] + 0.5));
    dat += alist * cos(pi*blist);


    }


    result -= 100 * dat;
    return result;


    }




    股票软件提供了PluginTCalcFunc.h头文件。
    包括注册DLL函数基本信息。注册函数名称为RegisterTdxFunc。
    下面是架构
    #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 tagPluginTCalcFuncInfo
    {
    unsigned shortnFuncMark;//函数编号
    pPluginFUNCpCallFunc;//函数地址
    }PluginTCalcFuncInfo;


    typedef BOOL(*pRegisterPluginFUNC)(PluginTCalcFuncInfo**);




    //RegisterTdxFunc函数为注册函数,用户的函数全部都放入PluginTCalcFuncInfo结构的全局数组g_CalcFuncSets中。
    typedef BOOL(*pRegisterPluginFUNC)(PluginTCalcFuncInfo**);


    //=======================================


    extern"C"
    {
    //__cplusplus
    __declspec(dllexport)BOOL RegisterTdxFunc(PluginTCalcFuncInfo**pFun);
    }




    #pragma pack(pop)
    #endif




    自编实现细节说明
    PluginTCalcFunc.h头文件中PluginTCalcFuncInfo结构用来存放用户自己的函数pCallFunc和函数唯一标记nFuncMark;pCallFunc是typedef void(*pPluginFUNC)( intDataLen,float* pfOUT,float* pfINa,float* pfINb,float* pfINc)类型指针;函数参数分别是(数据个数,输出,输入a,输入b,输入c),参数的计算是基于长度为DataLen的float类型数组。
    RegisterTdxFunc函数为注册函数,用户的函数全部都放入PluginTCalcFuncInfo结构的全局数组g_CalcFuncSets中。