欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → [C++]请教一个dll接口中,函数参数传递的问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3529人关注过本帖树形打印复制链接

主题:[C++]请教一个dll接口中,函数参数传递的问题

帅哥哟,离线,有人找我吗?
王锋
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2016/8/18 17:35:46 [显示全部帖子]

以下是引用damoncles在2016-8-18 17:00:20的发言:

为什么参数传递进来,有时候是这样写的

__declspec(dllexport) int WINAPI MYMACLOSE(CALCINFO* pData)
{
 if ( pData->m_pfParam1 &&    //参数1有效
   pData->m_nParam1Start<0 &&   //参数1为常数
   pData->m_pfParam2==NULL )   //仅有一个参数

 

有时候却是这样的

__declspec(dllexport) int WINAPI MYBBI(CALCINFO* pData)
{
 if ( pData->m_pCalcParam[0].m_nParamStart >= 0 &&
   pData->m_pCalcParam[1].m_nParamStart >= 0 &&
   pData->m_pCalcParam[2].m_nParamStart >= 0 &&
   pData->m_pCalcParam[3].m_nParamStart >= 0 )   //4个序列都含有效数值
 {
  //计算返回的序列的第一个有效值位置
  int nFirst = pData->m_pCalcParam[3].m_nParamStart;  //已知返回的序列的第一个有效值位置与第4个序列一致

 

这个主要取决于你在PEL中调用的方式来决定的,前面的是

"STOCKFUNC@MYMACLOSE"(5) 只有1个参数传递进去,所以只使用pData->m_pfParam1就可以了

 

后面的那个  MYBBI: "STOCKFUNC@MYBBI"(MA1, MA2, MA3, MA4, 4); 使用了5个参数,因此要使用m_pCalcParam扩展的数组结构,因为第中参数结构只能最多传递4个参数进去,这些我们都在工程中做了详尽的说明了,这里再照抄如下

 

/*
注1:
 1.函数调用参数由m_pfParam1--m_pfParam4带入,若为NULL则表示该参数无效.
 2.当一个参数无效时,则其后的所有参数均无效.
  如:m_pfParam2为NULL,则m_pfParam3,m_pfParam4也为NULL.
 3.参数1可以是常数参数或序列数参数,其余参数只能为常数参数.
 4.若m_nParam1Start<0, 则参数1为常数参数,参数等于*m_pfParam1;
 5.若m_nParam1Start>=0,则参数1为序列数参数,m_pfParam1指向一个浮点型数组,
  数组大小为m_nNumData,数据有效范围为 m_nParam1Start 至 m_nNumData-1.
  在时间上m_pData[x] 与 m_pfParam1[x]是一致的

注2:
 1.该扩展结构使调用参数在技术上可以是无限数目的,且每个参数都为数值序列。
 2.CALCPARAM结构用于带入参数信息和实际数据,m_pCalcParam数组大小为m_nNumParam,数据有效范围为 0 至 m_nNumParam-1.
 3.按参数的顺序,m_pCalcParam[0]为第一个参数的数据,m_pCalcParam[1]为第二个参数的数据...,为了保持兼容,原m_nParam1Start、m_pfParam1等5个属性依然有赋值。
 4.取用m_pCalcParam[i].m_pfParam,数组大小为m_nNumData,数据有效范围为m_pCalcParam[i].m_nParamStart 至 m_nNumData-1. 若m_pCalcParam[i].m_nParamStart<0, 则此数组中无有效数据。
 5.由于可以调用多个序列,许多序列的计算可以先在公式中进行,然后作为调用的参数即可。

*/

 



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2016/8/18 17:37:47 [显示全部帖子]

另外需要提醒的是,由于金字塔进程不允许调试,如果你对接口数据某些东西不是很理解传递了什么进去,你可以使用txt日志记录的方式,运行时将你需要了解的数据项写文件进去,这样同样起到了调试效果


金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2017/2/9 16:14:55 [显示全部帖子]

不可以


金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部