VC++写的DLL文件,MT4调用后,返回一个错误。

nplgcsdn 2012-09-24 09:53:56
请问:下面这个DLL函数返回值的写法,为什么在调用的时候会提示错误?
调用的语句:
Print("Returned GetSMAArray =",GetSMAValue( rates_m5, totalRecords_m5,5,0));

DLL中的一个函数 GetSMAValue():

#define MT4_EXPFUNC __declspec(dllexport)

MT4_EXPFUNC double _stdcall GetSMAValue( RateInfo* rates, int totalRecords, int period, int shift )

{
double Value;
for( int i = 0; i < totalRecords; i++)
{
double sum = 0.0;
for( int k = 0; k < period ; k++ )
{
sum += rates[totalRecords-i-1-k].close;
}
Value = sum / period ;
}
return ( Value );
}

我想返回一个计算后的值:Value

2012.09.24 21:56:04 DllIndicator2 EURUSD,M5: function 'GetSMAArray' call from dll 'DllIndicator2.dll' critical error c0000005 at 03691C5F.
...全文
432 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
反弹让他 2013-08-23
  • 打赏
  • 举报
回复
引用 3 楼 nplgcsdn 的回复:
谢谢hongwenjun这么快的解答! 问题解决了。但是你的答案没有找到问题的所在。 因为,我的这个问题是跨平台的。所以不是抱太大的希望能解决。只是希望找到个思路。 真正的问题是:critical error 这个错误。 我看翻译应该是“边界错误”,后来根据这个翻译的结果去查找。 发现是rates[totalRecords-i-1-k]这个数组的下标造成的。 计算的过程中,会出现[]内有负数出现。 比如65511-65508-1-5=-3 这个[]内是不能有负数的。改了下。好像问题解决了。 初步的判断是这个样子的。还要继续再测试。
这种方法是获取了数据,怎么将数组传给第三方的应用程序呢?
nplgcsdn 2012-09-25
  • 打赏
  • 举报
回复
谢谢hongwenjun这么快的解答!
问题解决了。但是你的答案没有找到问题的所在。
因为,我的这个问题是跨平台的。所以不是抱太大的希望能解决。只是希望找到个思路。

真正的问题是:critical error 这个错误。
我看翻译应该是“边界错误”,后来根据这个翻译的结果去查找。
发现是rates[totalRecords-i-1-k]这个数组的下标造成的。
计算的过程中,会出现[]内有负数出现。
比如65511-65508-1-5=-3
这个[]内是不能有负数的。改了下。好像问题解决了。
初步的判断是这个样子的。还要继续再测试。
hongwenjun 2012-09-24
  • 打赏
  • 举报
回复

extern "C"
{
int cfun(int i1, int i2)
{
return i1 + i2;
}
}
int fun(int i1, int i2)
{
return i1 + i2;
}

int fun(char i1, char i2)
{
return i1 + i2;
}


编译成dll后的名字是



EXPORTS
_Z3funcc @1 //int fun(char i1, char i2)
_Z3funii @2 //int fun(int i1, int i2)
cfun @3 //int cfun(int i1, int i2)
hongwenjun 2012-09-24
  • 打赏
  • 举报
回复

extern "C"
{
// A function adding two integers and returning the result
int SampleAddInt(int i1, int i2)
{
return i1 + i2;
}

}



C++ 因为支持重载,如果用C++写函数名,内部函数名会不一样
所以要加上 extern "C"{ 函数定义 },在里面定义函数,按C的方式编译函数名
这样就可以方便其他语言调用 dll了

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧