来自一个 "傻瓜 "的问题 - 页 75

 
kirill-demo:
我已经在Wizard中创建了我的专家顾问。我对mql不是很了解。能否请你以信封为例解释一下该怎么做?

CSignalEnvelopes类 没有这样的市场模型。

结论:我们需要改进这个班级(或编写我们自己的班级)。

 
在MT4和MT5中,从dll中调用函数 的区别是什么?我编译了dll,它在MT5中运行良好,但在MT4中却出现了错误。

2011.10.06 23:00:34 Solaris执行器EURUSDm,M1:无法从dll 'Solaris.dll'调用函数'InfoOfTrading'(错误127)。

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 
joo:
在MT4和MT5中从dll中调用函数 有什么区别?我编译了一个dll,在MT5中运行良好,但在MT4中却产生了一个错误。

2011.10.06 23:00:34 Solaris执行器EURUSDm,M1:无法从dll 'Solaris.dll'调用函数'InfoOfTrading'(错误127)。

请给我一个函数原型的描述。很可能你在MT5中使用了_stdcall的设计。

MT5有一个更灵活的DLL函数名链接机制--它自动支持_stdcall(更先进的名称装饰)和_cdecl(老的经典方法)。MetaTrader 4只支持_cdecl调用。

你读过"如何在10分钟内为MQL5编写DLL并分享数据"这篇文章吗"它详细解释了如何调用DLL函数。

 
Renat:

请提供函数原型的描述。最有可能的是,对于MT5,你使用了_stdcall设计。

MT5有一个更灵活的DLL函数名链接机制--它自动支持_stdcall(更先进的名称装饰)和_cdecl(老的经典方法)。MetaTrader 4只支持_cdecl调用。

阅读文章"如何在10分钟内为MQL5编写一个DLL并交换数据?"--有一个关于DLL函数调用的详细描述。

试图以这种方式宣布。

_DLLAPI void _cdecl InfoOfTrading(int &ou_ParamCountALl, int &ou_BarsRequired)

就这样。

_DLLAPI void InfoOfTrading(int &ou_ParamCountALl, int &ou_BarsRequired)

而不是旧的。

_DLLAPI void __stdcall InfoOfTrading(int &ou_ParamCountALl, int &ou_BarsRequired)

但现在出现了不同的错误。

2011.10.07 01:35:05 Solaris执行器EURUSDm,M1: 函数'InfoOfTrading'从dll'Solaris.dll'调用时出现严重错误


我读了这篇文章。


在项目的设置中,明确规定了调用的方式。


而在MT5中仍能正常工作,没有错误。

 
tol64:
一般来说,帮助中对信号的描述与你所需要的方式完全一致。你可以在这里 看到它。图中显示了CCI指标的设置。因此,最有可能的是,你的专家顾问不会只基于信封指标的信号。还有CCI。

对,很抱歉。我贴错了照片。但这并不能改变事情的真相。这里有一张来自EA的照片,只针对信封。

我应该怎么做? 我应该怎么解决?

 

顺便说一下,在标准MT4交付的surs例子中,调用是通过__stdcall进行的。

MT4_EXPFUNC double __stdcall GetDoubleValue(const double dpar)
  {
   printf("GetDoubleValue takes %.8lf\n",dpar);
   return(dpar);
  }

并且工作正常。

 
谁来给我解释一下!!!。
 
joo:

顺便说一下,在标准MT4的surs例子中,通过__stdcall调用。

并且工作正常。


在MT4的例子中。

#define MT4_EXPFUNC __declspec(dllexport)

MT4_EXPFUNC char* __stdcall GetStringValue(char *spar)

и имена экспортируемых функций явно описываются через *.def файл:

LIBRARY ExpertSample

EXPORTS GetIntValue
        GetDoubleValue
        GetStringValue
        GetArrayItemValue
        SetArrayItemValue
        GetRatesItemValue
        SortStringArray
        ProcessStringArray


stdcall似乎被支持。我不确定通过&来描述四的参数传递 是否正确。
Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Renat:

MT4的例子。

#define MT4_EXPFUNC __declspec(dllexport)

MT4_EXPFUNC char* __stdcall GetStringValue(char *spar)

и имена экспортируемых функций явно описываются через *.def файл:

LIBRARY ExpertSample

EXPORTS GetIntValue
        GetDoubleValue
        GetStringValue
        GetArrayItemValue
        SetArrayItemValue
        GetRatesItemValue
        SortStringArray
        ProcessStringArray


stdcall原来是被支持的。我不确定通过&来描述参数传递 的四种方式是否正确。

在两年的时间里,我完全没有学过4。:)

1.事实证明,以引用方式传递的变量不能写入dll中。你必须使用一个数组来实现这一点。

2.而且必须使用*.def文件。

这里实际上是我发现的使用4和5的dll的两个不同之处,可能还有更多。

 
朋友们,如果这种问题已经很烦人了,请告诉我如何正确填写参数>邮件标签?我在mail.ru上有邮件,能不能用?我不知道那里的服务器地址是什么......如果不合适,在哪里注册一个合适的?我想做电子邮件通知...