Diskussion zum Artikel "Die Entwicklung von grafischen Oberflächen für Expert Advisors und Indikatoren auf Basis von .Net Framework und C#" - Seite 10

 
super! funktioniert wie ein Zauber. vielen Dank!
 
Kann diese Bibliothek auch mit MT4 verwendet werden?
 
Können wir diese .Net-Anwendung in ein Diagramm einfügen?
 

Für MT4, Wir müssen einige Änderungen auf MtGuiController.dll. wie DLLEXPORT mit RGiesecke.DllExport und marshalling Input & Output-Parameter zu tun.

 // 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
 

Ich bin relativ neu bei MQL5 und habe viel aus diesem Artikel gelernt! Herzlichen Dank dafür!


Ich habe eine Frage. Ich habe in den letzten 2 Tagen ein wenig damit gekämpft, das unten stehende herauszufinden.


Ich habe jeden Schritt ein paar Mal erfolgreich ausgeführt, auch auf einem anderen Computer, aber jedes Mal, wenn ich versuche, den Code zu kompilieren, erhalte ich eine Fehlermeldung.


Der MQL-Compiler gibt an: "Undeclared Identifier" für jede der unten aufgeführten Aufzählungen.


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

Wenn ich diese Aufzählungen aus MQL5 "auskommentiere", dann funktioniert es entsprechend, was interessant ist, da dies bedeutet, dass der Code funktioniert, aber die Aufzählungen nicht lesen kann, was meine Vermutung ist?

Wenn jemand mir helfen kann, wäre ich sehr dankbar :)


Danke!

 

I am also trying to import a C# assembly. I can compile successfully, even with a call to a method imported from the assembly, so during compile time, everything seems to be fine.

But during executing in the Strategy Tester, it fails to load the EA with a simple "Cannot load 'MyDll.dll' [0]".

I put the DLL into MQL5\Libraries. I also tried putting it into the GAC, but nothing helped.

Any pointers on how to troubleshoot this?

 
dhilgarth:

I am also trying to import a C# assembly. I can compile successfully, even with a call to a method imported from the assembly, so during compile time, everything seems to be fine.

But during executing in the Strategy Tester, it fails to load the EA with a simple "Cannot load 'MyDll.dll' [0]".

I put the DLL into MQL5\Libraries. I also tried putting it into the GAC, but nothing helped.

Any pointers on how to troubleshoot this?

Ruf mal im Editor die MQL-Referenz (in der "Hilfe") auf, geh auf die Suchen Tab und trage Dll ein, Enter.

Dann gibt es eine Seite, wie dlls (und anderes) importiert wird.

Besser ist aber wohl dieser Artikel: https://www.mql5.com/de/articles/18

bzw, das hier: https://www.mql5.com/de/docs/runtime/testing#dll

Sonst hilft in die Suche oben rechts tester dll eingeben.
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...
 

Konnte jemand herausfinden, warum der folgende Fehler auftritt?

Der MQL-Compiler meldet: "Undeclared Identifier" für jede der unten aufgeführten Aufzählungen.

Ich bin auch immer den gleichen Fehler.

 
Mit Steuerelementen ist es viel einfacher, in C# im Vergleich zu EA zu entwickeln, und die Datenberechnungen usw. wurden verbessert, danke für den Austausch.
 
sachnyc:

Konnte jemand herausfinden, warum der unten stehende Fehler auftritt?

Der MQL-Compiler meldet: "Undeclared Identifier" für jede der unten aufgeführten Aufzählungen.

Ich bin auch immer den gleichen Fehler.

Sie können die numerische Darstellung der einzelnen Ereignistypen verwenden :

Ereignistyp ID
Ausnahme 0
KlickaufElement 1
TextÄndern 2
ScrollChange 3

Hier ist ein Beispiel mit der SendEvent Funktion (Dieser Code ist von TardePanel EA):

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

Sie ändern die Darstellung des Ereignisses TextChange für seine ID, die 2 ist, und Sie tun dies für alle Funktionen, die es benötigen.