递归火山软件开发平台

标题: 这个C++代码怎么转成火山PC代码 [打印本页]

作者: yegen0000    时间: 2021-9-11 02:44
标题: 这个C++代码怎么转成火山PC代码
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;
}





作者: dasemimi    时间: 2021-9-11 10:07
请使用  继承 结构基础类 这种方式。。。。具体看官方自带例子,你可以ctrl+f 搜索全部解决方案,找 使用过 结构基础类 的案例
作者: yegen0000    时间: 2021-9-11 13:37
能写个列子吗。C++不好。




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4