以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  高级功能研发区  (http://222.73.7.161/bbs/list.asp?boardid=5)
----  序列模式问题  (http://222.73.7.161/bbs/dispbbs.asp?boardid=5&id=10616)

--  作者:adam_wang
--  发布时间:2012/3/17 14:52:31
--  序列模式问题

我的公式运行在序列模式下, 通过调试发现序列变量下标为1的变量一直无法使用, 而且在调试模式下一直显示为"空", 而不想其他下标预设值显示为0.000, 请问是何原因?


--  作者:王锋
--  发布时间:2012/3/17 16:10:07
--  
代码贴过来看看
--  作者:adam_wang
--  发布时间:2012/3/17 17:22:09
--  

找到原因了,  不论在DLL中对pData->m_pResultBuf[0]如何赋值,

只要return 1就会造成序列变量下标1中的内容为空,

如果return 0就不会出现问题,序列变量下标1中的内容为dll中的赋值内容。

请问,对于dll的返回值,具体包括哪些?有何意义?

 

另外,再请教个问题:序列模式是否无法使用DLL中定义的全局变量,每次调用时全局变量的内容好像又回到初始值了?


--  作者:王锋
--  发布时间:2012/3/17 18:26:37
--  

返回的值表示的是返回的数组的有效下标,你返回1当然表示从第二个数组才有效的了。

你可能根本就没有仔细看过DLL公式的开发文档,这里给你摘抄部分

 

////////////////////////////////////////////////////
/* 函数输出

__declspec(dllexport) int xxxxxxxx(CALCINFO* pData);

1.函数名称需全部大写.
2.函数必须以上述形式声明,请用实际函数名称替代xxxxxxxx;
 对于C++程序还需包括在 extern "C" {   } 括号中.
3.函数计算结果用pData->m_pResultBuf带回.
4.函数返回-1表示错误或全部数据无效,对于序列模式返回第一个有效值位置,即:
 m_pResultBuf[返回值] -- m_pResultBuf[m_nNumData-1]间为有效值.逐K线模式返回值大于等于0均表示成功

*/

 

 

DLL的全局变量你没描述清楚,如果猜的没错的话,你在 工具菜单-》选项-》勾选“DLL加载内存驻留模式”即可


--  作者:adam_wang
--  发布时间:2012/3/17 19:43:59
--  
不好意思呀,太久没看资料,全忘了。
--  作者:王锋
--  发布时间:2012/3/18 20:17:12
--  

不要去擅自改动tagCALCINFO的结构字段!

DLL公式只能有一个返回值,就是m_pResultBuf; 定义的,你擅自增加了字段,将导致灾难性后果,引起软件崩溃死机