記事"Net FrameworkとC#に基づくエキスパートアドバイザーと指標のためのグラフィカルインターフェイスの開発"についてのディスカッション - ページ 10

 
ありがとうございます!
 
このライブラリはMT4でも使用できますか?
 
この.Netアプリをチャートに添付できますか?
 

MT4では、RGiesecke.DllExportを使用したDLLEXPORTや、入力と出力のパラメータの マーシャリングのように、MtGuiController.dll.上でいくつかの変更を行う必要があります。

 // add reference using nuget 
using RGiesecke.DllExport;

        [DllExport("ShowForm", CallingConvention = CallingConvention.StdCall)]
        public static void ShowForm([MarshalAs(UnmanagedType.LPWStr)] string assembly_path, [MarshalAs(UnmanagedType.LPWStr)] string form_name)
        {
            try
            {
                GuiController controller = GetGuiController(assembly_path, form_name);
                string full_path = assembly_path + "/" + form_name;
                m_controllers.Add(full_path, controller);
                controller.RunForm();
            }
            catch(ArgumentException e)
            {
                Type t = e.GetType();
                SendExceptionEvent(e);
            }
        }
        [DllExport("HideForm", CallingConvention = CallingConvention.StdCall)]
        public static void HideForm([MarshalAs(UnmanagedType.LPWStr)] string assembly_path, [MarshalAs(UnmanagedType.LPWStr)] string form_name)
        {
            try
            {
                string full_path = assembly_path + "/" + form_name;
                if (!m_controllers.ContainsKey(full_path))
                    return;
                GuiController controller = m_controllers[full_path];
                controller.DisposeForm();
                m_controllers.Remove(full_path);
            }
            catch(Exception ex)
            {
                SendExceptionEvent(ex);
            }
        }
        [DllExport("SendEvent", CallingConvention = CallingConvention.StdCall)]
        public static void SendEvent([MarshalAs(UnmanagedType.LPWStr)] string el_name, [MarshalAs(UnmanagedType.U4)] int id, [MarshalAs(UnmanagedType.U8)] long lparam, [MarshalAs(UnmanagedType.R8)] double dparam, [MarshalAs(UnmanagedType.LPWStr)] string sparam)
        {            
            SendEventRef(el_name, ref id, ref lparam, ref dparam, sparam);
        }
        [DllExport("ReceiveEvent", CallingConvention = CallingConvention.StdCall)]
        [return: MarshalAs(UnmanagedType.LPWStr)]
        public static string ReceiveEvent([MarshalAs(UnmanagedType.I4)] int event_n)
        {
            string json = "";
            int id=0;
            string el_name="", sparam="";
            long lparam=0;
            double dparam=0.0;
            GetEvent(event_n,ref el_name, ref id, ref lparam, ref dparam, ref sparam);
            json = "{ \"el_name\":\"" + el_name + "\",\"id\":" + id + ",\"lparam\":" + lparam + ",\"dparam\":" + dparam + ",\"sparam\":\"" + sparam + "\" }"; 
            return json;
        }
        public static void GetEvent(int event_n, ref string el_name,ref int id,  ref long lparam, ref double dparam, ref string sparam)
        {         
                GuiEvent e = m_global_events[event_n];
                el_name = e.el_name;
                id = (int)e.id;
                lparam = e.lparam;
                dparam = e.dparam;
                sparam = e.sparam;
            
        }
       
        [DllExport("EventsTotal", CallingConvention = CallingConvention.StdCall)]
        public static int EventsTotal()
        {
            return m_global_events.Count;
        }
      


MQL4


#import  "MtGuiController.dll"
void ShowForm(string assembly_path, string form_name);
void HideForm(string assembly_path, string form_name);
void SendEvent(string el_name, int id, long lparam, double dparam, string sparam);
string ReceiveEvent(int event_n); // Returns JSON string.. Use JAson.mqh to Deserialize objects
int EventsTotal();
#import
 

私はMQL5の初心者ですが、この記事から多くのことを学びました!ありがとうございました!


ひとつ質問があります。この2日間、以下のことを理解するのに少し苦労しています。


各ステップを別のコンピューターでも何度か成功させたのですが、コードをコンパイルしようとすると毎回エラーメッセージが表示されます。


MQLコンパイラーは次のように述べています:「というエラーメッセージが表示されます。


public enum GuiEventType
{
    Exception,
    ClickOnElement,
    TextChange,
    ScrollChange
}

MQL5からこれらの列挙を "コメントアウト "すると、その通りに動作するのですが、これはコードは動作するが列挙を読み取れないということを意味するので、興味深いことです。

どなたか教えていただけると助かります。)


ありがとう、

 

また、C#のアセンブリをインポートしようとしています。アセンブリからインポートされたメソッドへの 呼び出しでも正常にコンパイルできます。

しかし、Strategy Testerで実行すると、"Cannot load 'MyDll.dll' [0]"と表示され、EAのロードに失敗します。

DLLはMQL5Librariesに入れました。GACにも入れてみましたが、何も役に立ちませんでした。

トラブルシューティングの方法があれば教えてください。

 
dhilgarth:

また、C#のアセンブリをインポートしようとしています。アセンブリからインポートされたメソッドを呼び出しても、正常にコンパイルできます。

しかし、Strategy Testerで実行すると、"Cannot load 'MyDll.dll' [0]"と表示され、EAのロードに失敗します。

DLLはMQL5Librariesに入れました。GACにも入れてみましたが、何も役に立ちませんでした。

トラブルシューティングの方法があれば教えてください。

エディターでMQLリファレンスを呼び出し(「ヘルプ」にある)、「検索」タブで「Dll」、「Enter」と入力してください。

すると、dll(その他)のインポート方法のページがあります。

しかし、おそらくこちらの記事の方が良いでしょう: https://www.mql5.com/ja/articles/18

またはこちら: https://www.mql5.com/ja/docs/runtime/testing#dll

そうでなければ、右上の検索にtester dllと 入力してください。
Datenaustausch: Erstellen einer DLL für MQL5 in 10 Minuten
Datenaustausch: Erstellen einer DLL für MQL5 in 10 Minuten
  • www.mql5.com
Tatsächlich erinnern sich nicht viele Entwickler daran, wie eine simple DLL-Bibliothek geschrieben wird und was die Merkmale der unterschiedlichen Systemanbindungen sind. Anhand mehrerer Beispiele werde ich versuchen, Ihnen den gesamten Prozess zur Erstellung einer simplen DLL in 10 Minuten zu zeigen, sowie einige technische Einzelheiten der...
 

なぜ以下のようなエラーが発生するのか、どなたかお分かりになりましたか?

MQLコンパイラーは以下のように表示します:「と表示されます。

私も同じエラーが出ています。

 
コントロールを使えば、EAで開発するよりもC#で開発する方がずっと簡単だし、データ計算なども改善されている。教えてくれてありがとう。
 
sachnyc:

なぜ以下のようなエラーが発生するのか、どなたかお分かりになりましたか?

MQLコンパイラーは以下のように表示します:「と表示されます。

私も同じエラーが出ています。

各イベント・タイプの 数値表現を使用できます

イベント・タイプ ID
例外 0
要素クリック 1
テキスト変更 2
スクロール変更 3

SendEvent関数を使った例です(このコードはTardePanel EAのものです):

GuiController::SendEvent("CurrentVolume", TextChange, 0, 0.0, corr_vol);
GuiController::SendEvent("CurrentVolume", 2, 0, 0.0, corr_vol);

イベントTextChangeのID(2)の表現を変更し、それを必要とするすべての関数に対してこれを行います。