Named Pipes DLL aus MT5 aufrufen. Wie man?
Seite 1 von 574 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 31

Thema: Named Pipes DLL aus MT5 aufrufen. Wie man?

  1. #1
    Mein ultimatives Ziel ist es, mehrere MT45-Plattformen verwenden zu können, um eine in C # geschriebene benutzerdefinierte Anwendung zu füttern.

    Eingegebene Code MT5 | | \MT5 - Blackbox C # programlt; --- MT5\ | | MT5
    Im Moment macht Black Box nichts. Ich arbeite gerade an der Kommunikation.

    Ich habe die Client.cs und Server.cs erfolgreich miteinander zu reden. Wenn ich PipeServer in eine DLL auslege und versuche, in MT5 zu laden, erhalte ich die Fehlermeldung ”SendString” in ”PipeServer.dll” nicht. Ich habe alles versucht, woran ich denken kann. Ich habe zahlreiche Online-Artikel gelesen und bin immer noch im Kreis unterwegs.

    C # -Code für PipeServer: (Beachte nicht alle Kommentare. Es erleichtert nur das Wechseln zwischen DLL und Exe.)
    Eingefügter Code mit System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO.Pipes; using System.IO; using System.Diagnostics; using System.Runtime.InteropServices; using RGiesecke.DllExport; Namespace PipeServer {public class Server {//static void Main (Zeichenfolge # 91; # 93; args) # 91; DllExport (SendString, CallingConvention = CallingConvention.StdCall) # 93; public static void SendString (string args) {using (NamedPipeServerStream pipeServer = neuer NamedPipeServerStream (testpipe, PipeDirection.InOut)) {//Console.WriteLine (NamedPipeServerStream-Objekt erstellt)./Warten Sie, bis ein Client eine Verbindung hergestellt hat/Console.Write(Warten auf Clientverbindung ...); pipeServer.WaitForConnection ();/Console.WriteLine(Client verbunden.);/bool Disconnect = false; try {//Benutzereingabe lesen und an den Client-Prozess senden. using (StreamWriter sw = neuer StreamWriter (pipeServer)) {//string temp;/while (pipeServer.IsConnected! Disconnect)/{sw.AutoFlush = true;/Console.Write(Enter text:);/temp = Console.ReadLine ();/if (temp == exit) Disconnect = true;/Disconnect = true; sw.WriteLine (args);/}}}/Fange die IOException, die ausgelöst wird, wenn/die Pipe gebrochen oder getrennt ist. ch (IOException e) {Console.WriteLine (ERROR: {0}, e.Message); }}}}}
    C # -Code für den PipeClient:
    Eingefügter Code mit System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO.Pipes; using System.IO; using System.Diagnostics; Namespace PipeClient {öffentliche Klasse Client {static void Main (Zeichenfolge # 91; # 93; args) {using (NamedPipeClientStream pipeClient = neuer NamedPipeClientStream (., testpipe, PipeDirection.InOut)) {//Verbinden Sie sich mit der Pipe oder warten Sie bis die Pipe ist verfügbar. Console.Write (Versuch, eine Verbindung zur Pipe herzustellen ...); pipeClient.Connect (); Console.WriteLine (Verbunden mit Pipe.); Console.WriteLine (Derzeit sind {0} Pipe-Server-Instanzen geöffnet., PipeClient.NumberOfServerInstances); while (pipeClient.IsConnected) {using (StreamReader sr = neuer StreamReader (pipeClient)) {//Den gelesenen Text in der Konsolenzeichenfolge anzeigen temp; while ((temp = sr.ReadLine ())! = ) {Console.WriteLine (vom Server empfangen: {0}, temp); }}}} Console.Write (Drücken Sie die Eingabetaste, um fortzufahren ...); Console.ReadLine (); }}}
    MQL5-Code für EASkript:
    Eingefügter Code/ ----------------------------------------- --------------------- /| TestPipeServer.mq5 |/| Copyright, NONE |/| |/ ------------------------------------------- ------------------- /# property script_show_inputs #import PipeServer.dll statisch void SendString (string args); #import/ ----------------------------------------- --------------------- /| Skriptprogramm-Startfunktion |/ ------------------------------------------- ------------------- void OnStart () {Drucken (Test richtig geladen); SendString (Test);/Wenn ich diesen Funktionsaufruf auskommentiere, funktioniert das Skript}/ ----------------------------- ---------------------------------
    Beim Testen von C # - C # wird ein Durchsatz von über 165.000 TicksSekunde erzielt, ohne dass die Leistung verändert wird. Dies ist einer der Hauptgründe, warum ich eine DLL-Lösung verwenden möchte. Auch die Entwicklung in C # ist weniger restriktiv. Ich verstehe zwar, dass es Möglichkeiten gibt, nativen MQL5-Code zu verwenden, aber das ist nicht der Pfad, den ich verfolge.


    Meine allgemeine Frage ist also, wie rufe ich meinen SendString (string someParameter) richtig auf?
    Es ist im Moment egal, welchen Datentyp ich sende. Es kann ein Int, Double oder String sein. Ich möchte nur die Funktionalität zum Laufen bringen.


    Jede Hilfe oder Anregung wäre sehr dankbar, damit ich aufhören kann


    Vielen Dank,

    Jason

  2. #2
    Ich programmiere nicht in c # und habe noch nie mt5 benutzt. Meine Vermutung ist jedoch, dass der mt5-String-Typ nicht mit Ihrem c # -String [] übereinstimmt. Vielleicht überarbeiten Sie es so, dass stattdessen ein generischer Arrayzeiger verwendet wird.

  3. #3
    Deshalb sagte ich, es sei egal, ob ich verschiedene Datentypen übergeben wollte. Ich habe es auch mit int und double ausprobiert. Ich bin noch nicht einmal in Arrays. Die Zeile mit Main (string [] args) wurde auskommentiert, da diese Zeile verwendet wird, wenn der Code als Exe ausgeführt werden soll, anstatt in eine DLL zu kompilieren.

  4. #4

    Zitat Zitat von ;
    Deshalb sagte ich, es sei egal, ob ich verschiedene Datentypen übergeben wollte. Ich habe es auch mit int und double ausprobiert. Ich bin noch nicht einmal in Arrays. Die Zeile mit Main (string [] args) wurde auskommentiert, da diese Zeile verwendet wird, wenn der Code als Exe ausgeführt werden soll, anstatt in eine DLL zu kompilieren.
    Meine Augen sind verschwommen und ich lese Ihren Text völlig anders, als Sie es meinten. mein Fehler. Ich habe immer noch den Verdacht, dass Sie in Ihrer DLL einen Zeigertyp verwenden müssen, um die Adresse zu erhalten. Ich glaube nicht, dass Sie Daten von außerhalb einer DLL so übergeben können, wie Sie es haben. Sie schlagen jedoch vor, dass es funktioniert, wenn Sie von einem anderen Exe laden, nur nicht von mt5.

  5. #5
    Haha ... manchmal verschwimmt dieses Zeug, stimme ich zu. Wenn ich von C # zu C # wechsle, könnte ich Text in Console.Readline und Console.Writeline eingeben und ihn auf der anderen Seite durch die Pipeline streuen. Es wurden keine Hinweise benötigt. Wenn ich jetzt herausfinden kann, wie man MQL5 dazu bringt, dasselbe zu tun? Ich weiß, dass ich nicht der erste bin, der dies versucht hat. Wenn also FF-Mitglieder dazu beitragen können, dass dies funktioniert, kann jeder es nutzen.

  6. #6
    dies weckte meine neugier (danke dafür übrigens). es scheint, c # ist der Teufel. Von meinem naiven Lesen sind C # -Bibliotheken nicht dasselbe wie C - Bibliotheken und so weiter. der gesamte .net-Aspekt verändert das Spiel.
    http://www.vistax64.com/net-general/...c-project.htmlWenn Sie die dll in c schreiben oder ficken oder sogar delphi (vielleicht einer der kostenlosen Pascal-Compiler, die heutzutage in der Umgebung herumfliegen) schreiben können, sparen Sie sich vielleicht eine Tonne Kopfschmerzen.

  7. #7
    Die Möglichkeit, dieses mit C # zu schreibenzu arbeiten, ist ein absolutes Muss. Die ultimative Roadmap für das, was damit funktionieren wird, basiert auf C #. Kein C # ist ein Dealbreaker in meiner Situation. Ich glaube nicht, dass die C # -Bibliotheken das große Problem waren. Ich habe den Client und den Server bereits streng über C # (im Grunde direkt von MSDN). Wenn ich MT5 vorstelle, laufen die Dinge schlecht. Jemand hier muss den einfachen kleinen Leckerbissen erkennen können, den ich vermisse. Bis dann,

  8. #8
    Zitat Zitat von ;
    Die Möglichkeit, dieses mit C # zu schreibenzu arbeiten, ist ein absolutes Muss. Die ultimative Roadmap für das, was damit funktionieren wird, basiert auf C #. Kein C # ist ein Dealbreaker in meiner Situation. Ich glaube nicht, dass die C # -Bibliotheken das große Problem waren. Ich habe den Client und den Server bereits streng über C # (im Grunde direkt von MSDN). Wenn ich MT5 vorstelle, laufen die Dinge schlecht. Jemand hier muss den einfachen kleinen Leckerbissen erkennen können, den ich vermisse. Bis dann,
    ich schlage nur vor, dass der mql-Lese-Schreibzugriff auf Pipes in c als Brücke von mt5 zum Betriebssystem und den Pipes ist. es sollte nur eine kleine dll sein, die rein zum LesenSchreiben von Pipes gedacht ist, und sonst nichts. Danach ist das, was Sie in Ihrer aktuellen C # -Haupt-App tun, irrelevant, da Sie Pipes wie gewohnt aus Ihrer Anwendung lesenschreiben können. Ihr Problem scheint zu sein, was ich sagen kann, dass .net-Bibliotheken anders aussehen als in früheren Zeiten, und ich gehe davon aus, dass mql45 auf einer C - Bibliothek basiert, nicht auf .net-Bibliotheken. Dies könnte relevant sein und möglicherweise eine noch bessere Lösung. Ich habe nicht alles gelesen, aber es scheint eine mql5-Lösung zu sein:
    http://www.mql5.com/en/articles/115Ich glaube, ich habe keine Ideen mehr.

  9. #9
    Ich bin mit diesem Artikel sehr vertraut. Das war der erste, den ich zuerst benutzt habe, aber der Versuch, die NamedPipeServerStream () - Funktion mit allen Überladern zu erhalten, war ein Albtraum. Ich versuche sogar, ganz grundlegend zu sein: Eingefügter Code # 91; DllExport (Add, CallingConvention = CallingConvention.StdCall) # 93; public static int Add (int links, int rechts) {return left right; } MQL-Code, um zwei Ganzzahlen hinzuzufügen: Eingefügter Code #import PipeServer.dll int Add (int left, int right); #import/ ----------------------------------------- --------------------- /| Skriptprogramm-Startfunktion |/ ------------------------------------------- ------------------- void OnStart () {for (int i = 0; ilt; 3; i ) {Print (Add (i, 10)); }} Ich bekomme immer noch den gleichen Fehler. Es scheint egal zu sein, ob es sich um eine komplexe Funktion wie LesenSchreiben inaus einer Pipe oder um eine einfache Add-Funktion handelt. Ich glaube, ich nenne es eine Nacht!

  10. #10

    Zitat Zitat von ;
    Ich bin mit diesem Artikel sehr vertraut. Das war der erste, den ich zuerst benutzt habe, aber der Versuch, die NamedPipeServerStream () - Funktion mit allen Überladern zu erhalten, war ein Albtraum. Ich versuche sogar, ganz grundlegend zu sein: Eingefügter Code # 91; DllExport (Add, CallingConvention = CallingConvention.StdCall) # 93; public static int Add (int links, int rechts) {return left right; } MQL-Code, um zwei Ganzzahlen hinzuzufügen: [code] #import PipeServer.dll int Add (int left, int right); #import/ ----------------------------------------- --------------------- /| ...
    Sie scheinen das falsch zu machen ... Ihr Problem, so wie ich es verstehe, ist, dass mql45 wahrscheinlich nicht für .net gedacht ist (nur meine eigenen Spekulationen) und stattdessen beim Versuch Win32-Bibliotheken erwartet importieren. WENN meine Annahme richtig ist, können Sie das ganze Jahr auf die gleiche Art und Weise versuchen und nichts erreichen. In dem Artikel, auf den ich verlinkt habe, wurde gezeigt, wie eine Mql5-Klasse implementiert wird, die sich direkt mit Kernel32.dll-Pipe-Aufruf und whatnot befasst. Sie versuchen, eine nie gonna-work-work-leicht (oder vielleicht auch immer) .net-DLL in ein mql5-Skript einzufügen, um sich mit der Pipe-Behandlung zu beschägen. Stattdessen können Sie die Pipe-Behandlung direkt MIT Mql5 ausführen, ohne etwas anderes als Kernel32 zu importieren . Es scheint, Sie können das problematische Problem des Versuchs, eine bestimmte DLL zu importieren, die einfach nicht in die Importierungsmethode von mql5 passt, vollständig ausschalten. Kopieren Sie den Code im Artikel und importieren Sie einfach Kernel32 (wenn ich es richtig gelesen habe). Dann erledigen Sie einfach alle Rohrleitungen direkt in mql5. Unabhängig davon, ob es sich um .net-DLLs handelt oder nicht, sollten Sie versuchen, die Pipe-Behandlung direkt in mql5 zu erledigen, anstatt an der aktuellen Straßensperre hängen zu bleiben, weil Sie keine fehlerhafte DLL importieren können. Ich bin mit mql5 und c # noch nicht vertraut, also könnte ich total scheiße sprechen. edit: Schauen Sie sich auch dieses mql4-Codebeispiel an und kopieren und fügen Sie es nach Bedarf in mql5 ein, falls es nicht zu 100% kompatibel ist: http://www.forum.com/showthread.php?t = 125117

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
Die tradingintuitive Webseite verwendet Cookies
Wir nutzen Cookies, um Ihnen das Webseitenerlebnis bestmöglich anbieten zu können. Durch weitere Nutzung der Webseite erlauben Sie die Nutzung von Cookies. Für weitere Details und wie Sie ggf. diese Einstellungen verändern können, lesen Sie bitte unsere Datenschutzbestimmung. Lesen Sie mehr