"ダミー "からの質問 - ページ 75

 
kirill-demo:
ウィザードでExpert Advisorを作成しました。私はmqlをよく知りません。封筒の例で説明していただけませんか?

CSignalEnvelopesクラスは、このような市場モデルを持ちません。

結論:クラスを改善する必要がある(または独自のクラスを書く必要がある)。

 
MT4とMT5で、DLLから関数を呼び出す 場合の違いは何ですか?コンパイルすると、MT5では正常に動作しますが、MT4ではエラーになります。

2011.10.06 23:00:34 Solaris executor 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 executor 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コールにのみ対応しています。

記事を読む"MQL5のDLLを書いて、10分でデータ交換する方法とは?" - 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 executor EURUSDm,M1: dll 'Solaris.dll' からの関数 'InfoOfTrading' コール 重大なエラー


記事を読みました。


プロジェクトの設定で、呼び出し方法を明示的に指定します。


そして、MT5では、まだエラーなしで動作しています。

 
tol64:
一般に、信号はヘルプに正確に記述されています。こちらで ご覧いただけます。画像はCCIインジケーターの設定です。したがって、ほとんどの場合、Expert AdvisorはEnvelopesインジケータの信号だけに基づいているわけではありません。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はサポートされているようです。FOURの場合、パラメータの受け渡しを&で表現するのが正しいのかどうか。
Документация по 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については、パラメータの受け渡しを&で記述するのが正しいかどうかわかりません。

4で2年で完全に懲り懲りです。:)

1.参照渡しされた変数は、DLLに書き込めないことが判明した。そのためには配列を使わなければならない。

2.そして、*.defファイルを使用することが義務付けられています。

ここでは、私が発見した4と5のDLLを使った作業の違いを2つ紹介しますが、他にもあるかもしれません。

 
みなさん、この手の質問はもう迷惑だったらごめんなさい、parameters>mailタブの正しい記入方法を教えてください。mails.ruにメールがあるのですが、使えますか?私はそこにサーバーのアドレスが何であるかわからない...適切ではない場合、どこに適切な登録するには?メール通知を行いたいのですが・・・。