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

 

Ein Beispiel finden Sie in der Ankündigung https://www.metatrader5.com/ru/releasenotes/terminal/1898.

MQL5

  1. Native Unterstützung für .NET-Bibliotheken mit "intelligentem" Import von Funktionen wurde hinzugefügt. Jetzt können Sie .NET-Bibliotheken verwenden, ohne spezielle Wrapper zu schreiben - MetaEditor kümmert sich darum.

    Um mit Funktionen von .NET-Bibliotheken zu arbeiten, genügt es, die DLL selbst zu importieren, ohne bestimmte Funktionen anzugeben. MetaEditor importiert automatisch alle Funktionen, mit denen es möglich ist, zu arbeiten:
    .
    • Einfache Strukturen (POD, plain old data) - Strukturen, die nur einfache Datentypen enthalten.
    • Öffentliche statische Funktionen, in deren Parametern nur einfache Typen und POD-Strukturen oder deren Arrays verwendet werden
      .

    Um Funktionen aus der Bibliothek aufzurufen, importieren Sie sie einfach:
    .
    #import "TestLib.dll"
    
    //+------------------------------------------------------------------+
    //| Skript-Programmstartfunktion|
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int x=41;
       TestClass::Inc(x);
       Print(x);
      }
    Der C#-Code der Inc-Funktion der Klasse TestClass sieht wie folgt aus:
    .
    public class TestClass
    {
       public static void Inc(ref int x)
       {
        x++;
       }
    }
    Das Skript gibt den Wert 42 zurück.

    Die Arbeit an der Unterstützung von .NET-Bibliotheken ist im Gange, und es ist geplant, ihre Verwendung in zukünftigen Versionen zu erweitern.

  2. Die Unterstützung für die Arbeit mit WinAPI-Funktionen wurde der Standardbibliothek hinzugefügt. Jetzt müssen Sie nicht mehr manuell Bibliotheken importieren und Funktionssignaturen beschreiben, um Betriebssystemfunktionen in einem MQL5-Programm zu verwenden. Es reicht aus, die Header-Datei aus dem MQL5\Include/WinAPI-Katalog zu verbinden.

    WinAPI-Funktionen sind in separaten Dateien nach Zweck gruppiert:

    .
    • libloaderapi.mqh - Arbeiten mit Ressourcen
    • memoryapi.mqh - Umgang mit Speicher
    • processenv.mqh - Arbeiten mit der Umgebung
    • processthreadsapi.mqh - Arbeit mit Prozessen
    • securitybaseapi.mqh - Arbeit mit dem OS-Sicherheitssystem
    • sysinfoapi.mqh - Systeminformationen abrufen
    • winbase.mqh - allgemeine Funktionen
    • windef.mqh - Konstanten, Strukturen und Aufzählungen
    • wingdi.mqh - Arbeiten mit grafischen Objekten
    • winnt.mqh - Behandlung von Ausnahmen
    • winreg.mqh - Arbeiten mit der Registry
    • winuser.mqh - Fenster- und Schnittstellenverwaltung
    • errhandlingapi.mqh - Fehlerbehandlung
    • fileapi.mqh - Dateibehandlung
    • handleapi.mqh - Behandlung von Handles
    • winapi.mqh - Verbindung aller Funktionen (WinAPI-Header-Dateien).

    Die Bindung funktioniert nur mit 64-Bit-Architektur.


MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.10.26
  • MetaQuotes
  • www.metatrader5.com
Теперь вы можете выносить графики финансовых инструментов за пределы окна торгового терминала. Это удобно при работе с несколькими мониторами. Например, на одном можно расположить основное окно платформы и следить за состоянием счета, а на другом — графики для оценки ситуации на рынке. Чтобы отделить график от терминала, отключите опцию...
 
Nextor Visual Studio 2022, erstellt ein Formular mit einer Schaltfläche, führen Sie es in MetaTrader 5, ich bekomme einen Fehler....

In Visual Studio Community 2019 funktioniert alles wie vom Autor beschrieben, aber wenn er schreibt:

"Jedes Formular hat eine öffentliche Liste von Elementen, die es enthält. Die Methode geht die Liste der Elemente durch und findet diejenigen, die der Controller unterstützen kann, und abonniert die benötigten Ereignisse. Wenn ein Element des Formulars vom Controller nicht unterstützt wird, wird es einfach ignoriert. "

Leider, wenn Sie einen SplitContainer oder DataGridView auf dem Testformular platzieren, startet das Formular überhaupt nicht, es ist nicht klar, warum, aber eine so komplexe Komponente wie Chart STARTET.

Ich füge ein Testbeispiel bei, welche Komponenten zur Änderung verwendet werden können (obwohl das Formular startet!).

Dateien:
TESTGUIC.zip  706 kb
 

beim Versuch, einen Controller zu erstellen GuiController controller = new GuiController(assembly, form, m_global_events);
gibt Unexpected exception: The key with this name already exists (for DataGridView) and the controller is NOT created (the form is created, probably it can be shown, but without the controller how to control it?).

Noch einmal: Alles ist OK, wenn es keine SplitContainer- und/oder DataGridView-Komponenten gibt.

 
Nikolai Karetnikov #:

vielleicht stolpert jemand anderes

dies ist die Stelle im Artikel

"Wie Sie sehen können, versteht der Compiler externe Aufzählungen, die in Netzbibliotheken definiert sind, und weiß, wie man mit ihnen arbeitet."

Ich weiß nicht, aus welchem Grund, aber der Compiler weigert sich hartnäckig, C# Enums zu verstehen, also ziehen wir enum von C# in Mql5 und alles funktioniert.

Nur, Vasily, du hast die Schaltflächen Kaufen und Verkaufen im Handelsbereich verkehrt herum platziert ))

Aber im Großen und Ganzen hat sich die coolste Sache herausgestellt. Vielen Dank für deine harte Arbeit!)

Ich hatte das gleiche Problem.

Ich habe es ein wenig anders gelöst - statt ClickOnElement habe ich GuiEventType::ClickOnElement geschrieben. Und danach kompiliert es und funktioniert ohne Probleme. Aber wenn das der Fall ist, ist es wirklich unklar, wie es bei Vasily funktioniert hat. Vielleicht habe ich etwas falsch gemacht...

Aber ansonsten ist das Ding wirklich notwendig und nützlich. Es ist schade, dass MQL5 nicht etwas ähnliches (eingebaut) hat.

 
MQL_User #:

Ich hatte das gleiche Problem.

Ich löste dieses Problem ein wenig anders - anstelle von ClickOnElement schrieb ich GuiEventType::ClickOnElement. Und danach kompiliert es und funktioniert ohne Probleme. Aber wenn das der Fall ist, ist es wirklich unklar, wie es bei Vasily funktioniert hat. Vielleicht habe ich etwas falsch gemacht...

Aber ansonsten ist das Ding wirklich notwendig und nützlich. Es ist schade, dass MQL5 nicht etwas ähnliches (eingebaut) hat.

Ich hatte einen solchen Fehler:

@MQL_User, ich habe es so gemacht wie Sie: " ...statt ClickOnElement schrieb ich GuiEventType::ClickOnElement" - alles funktionierte!

 
Mano Output-Parameter zu tun.

Dies funktioniert nicht für MT4. Ich habe versucht, ohne Ergebnisse.

 
Pete #:

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


Ich habe eine Frage. Habe in den letzten 2 Tagen ein bisschen gekämpft, um dies unten herauszufinden.


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


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


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

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


Danke!

Ich habe gelesen, dass Sie die Enums auch in der MQH-Datei genau so deklarieren müssen, wie sie in der DLL deklariert wurden.

 
Mano Output-Parameter zu tun.

string ReceiveEvent(int event_n); // Returns JSON string.. Use JAson.mqh to Deserialize objects

Wie verwende ich dies innerhalb von OnTimer()?

Ich verwende den gleichen Ansatz wie in diesem Artikel beschrieben

void OnTimer()
{
   CJAVal data;
   
   for(static int i = 0; i < EventsTotal(); i++)
   {
      data.Deserialize(ReceiveEvent(i));
      Print(data.["id"].ToStr());
        
   }   
}


Meine Frage ist: welchen int muss ich innerhalb der ReceiveEvent-Funktion übergeben?
Entschuldigen Sie meine Unwissenheit, aber ich verstehe es nicht.
 
Hallo zusammen!! Es ist ein sehr nützlicher Artikel, da wir in der Lage sind, Dot-Net-Anwendungen in MT5/4 zu integrieren.
Ein großes Dankeschön an den Autor.

Ich bin nicht an c# sondern an vb gewöhnt. Ich habe versucht, ein Formular mit vb dot net zu erstellen und es in das MT5-Terminal einzubinden, aber es ist mir nicht gelungen.

Kann mir jemand helfen?
Unterstützt dieser Connector nur c#?
Gibt es eine Möglichkeit, mit vb.net zu arbeiten?
Ich schätze Ihre Hilfe.
Vielen Dank im Voraus.
 

Können Sie mir bitte sagen, was mit dem Programm GuiMtController.mq5 nicht stimmt, das beim Ausführen einen Fehler meldet?

GuiMtController.mq5'.
ClickOnElement'-Undeklarierter Bezeichner
1 Fehler, 0 Warnungen
Dateien:
k9un.jpg  160 kb