金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2691|回复: 6

_STOCKFUNC编译好的DLL函数在C++接口中的二次使用

[复制链接]

36

主题

136

帖子

146

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
永杰
发表于 2021-5-29 09:32 | 显示全部楼层 |阅读模式
本帖最后由 资深技术01 于 2021-5-29 09:46 编辑

老师你好,我已经编译好了二个C++函数,序列模式,也已经重新调回了C++接口内,其中BZQMA函数有一个参数,H5L函数没有参数,我需要这二个函数在VC++中继续编辑出来新的指标,不知道怎么在C++里面使用这二个函数,请老师指导。
[C++] 复制代码
__declspec(dllexport) int WINAPI KDKKTJ(CALCINFO* pData)
{
        if ( pData->m_pfParam1==NULL )                        //仅有0个参数
        {typedef float (*pBZQMA)(int i);
                 typedef float (*pH5L)(int i);
         HINSTANCE hDLL;
                 pBZQMA BZQMA;
                 pH5L H5L;
                 hDLL=LoadLibrary("JZT10S.dll");//加载动态链接库JZT10S.dll文件;
         BZQMA=(pBZQMA)GetProcAddress(hDLL,"BZQMA");
                 H5L=(pH5L)GetProcAddress(hDLL,"H5L");
                 FreeLibrary(hDLL);//卸载jzt10s.dll文件;

                int i=pData->m_nNumData+1;
                                         for ( i;i>=0; i-- )
                {                  float sgdx=BZQMA(5)+H5L();//这句是错误的, 这里H5L函数仅有0个参数BZQMA仅有1个参数,我上面把它们加载好了,怎么在这里使用,生成MA1 MA2 ……MA7,参数可以是5,10等整数;然后生成轨道MA1+H5L,MA1-H5L。

                        pData->m_pResultBuf[i] =sgdx;  
                }
                return 0;        
        }      
 
        return -1;
}

jzt10s.dll

66 KB, 下载次数: 3815

回复

使用道具 举报

0

主题

53

帖子

53

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-24
曾用名:
发表于 2021-5-29 09:45 | 显示全部楼层
C++的编程基础已经超过了我们客服范畴哦,我们只能给您提供相关的技术帮助。
您上面的代码存在2个问题:
1,FreeLibrary(hDLL); 应该放在函数最后
2,因为我们不了解BZQMA函数的具体原理,不清楚在序列模式下具体能否达到您的需求

此外c++对编程的能力要求极高,您必须学会使用写文件日志方式的调试手段,只有这样您才能了解和掌握c++的编程以及插件的工作原理。
回复

使用道具 举报

36

主题

136

帖子

146

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
永杰
 楼主| 发表于 2021-5-29 11:46 | 显示全部楼层
老师,BZQMA就是类似MA(C,N),序列模式只有一个周期参数,H5L没有任何参数,就是输出了一个数据;二个函数本周期内不随C值变化波动的,并且左边第一根K线,二个函数都有数据输出。原理特别简单,都是简单的取平均差不多的,只是PEL里面难以完成这种计算

补充内容 (2021-5-29 11:48):
ma1:"ZT10S@BZQMA"(5);
h5l:"ZT10S@H5L";
这样可以输出数据

补充内容 (2021-5-29 13:14):
我只需要客服老师把二个函数成功在这个地方引入进来,其它的我自己可以解决,您说的释放DLL应该在程序最后,这点我也知道,只是放循环后面释放DLL编译报错。我就是不知道这二个函数回调回来以后怎么使用了
回复

使用道具 举报

1

主题

861

帖子

871

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2021-5-31 09:53 | 显示全部楼层
本帖最后由 技术015 于 2021-5-31 10:04 编辑

楼主的typedef float (*pH5L)(int i);定义错误,不含参数的应该是typedef float (*pH5L)();

回复

使用道具 举报

1

主题

21

帖子

21

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-20
曾用名:
发表于 2021-5-31 10:33 | 显示全部楼层
楼主是要在工程中使用jzt10s.dll中的函数吗?这个dll中的函数和是和__declspec(dllexport) int WINAPI KDKKTJ(CALCINFO* pData)的一样的,你的函数定义是错的,应该是typedef int (WINAPI * fnMyFun)(CALCINFO* pData),不是typedef float (*pBZQMA)(int i);
回复

使用道具 举报

1

主题

21

帖子

21

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-20
曾用名:
发表于 2021-5-31 10:35 | 显示全部楼层
本帖最后由 技术013 于 2021-5-31 10:39 编辑

形式上调用是float sgdx=BZQMA(pData)+H5L(pData);但是实际上肯定不错的,你需要定义临时变量CALCINFO分别存放存放BZQMA和H5L的处理结果,再根据结果计算sgdx值。
回复

使用道具 举报

36

主题

136

帖子

146

积分

Rank: 4

等级: 专业版

注册:
2021-5-20
曾用名:
永杰
 楼主| 发表于 2021-6-1 06:18 | 显示全部楼层
谢谢老师指点,我理解了,慢慢弄。老师说的方法应该是对的。我zt10s.dll中的函数,这个dll中的函数是和__declspec(dllexport) int WINAPI KDKKTJ(CALCINFO* pData)的一样的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-12-22 13:09 , Processed in 0.256277 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表