Named Pipes DLL aus MT5 aufrufen. Wie man? - Seite 3
Seite 3 von 574 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 31

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

  1. #21
    Ok, ich habe endlich herausgefunden, wie man gitHub benutzt. Ich hatte einen versteckten Ordner, der meine Einstellungen von einem früheren Versuch, alles in Gang zu setzen, zerstörte. Nun, da dies läuft, werde ich es verwenden, um Code zu aktualisieren und hier die Gründe hinter der Lösung zu veröffentlichen. * bearbeiten - Link hinzufügen *: gitHub link:
    https://github.com/jasonforex/MetaTraderBridge

  2. #22
    Jason, haben Sie jemals herausgefunden, wie Sie Ihre C # -DLL erstellen und von MT4 aus aufrufen? Ich habe gerade die letzten paar Stunden daran gearbeitet und kann Code teilen, wenn Sie möchten: MT4-Skript 'testDLL' Code: Datei testUMD.dll hinzugefügt zu ExpertenBibliotheken Ordner Eingefügter Code #import testUMD.dll int AddInteger (int Wert1, int Wert2); double AddDouble (doppeltes Value1, doppeltes Value2); Zeichenfolge AddDoubleString (double Value1, double Value2); String returnString (String-Eingabe); #import/ ----------------------------------------- --------------------- /| Skriptprogramm-Startfunktion |/ ------------------------------------------- ------------------- int start () {//---- Print (AddInteger: AddInteger (250, 750)); double a = AddDouble (250,750); Drucken (AddDouble: NormalizeDouble (a, 4)); double d = StrToDouble (AddDoubleString (250, 750)); Drucken (AddDoubleString: NormalizeDouble (d, 4)); string temp = An DLL senden; String recv = returnString (Temp); Drucken (recv);/---- return (0); } C # -Code für 'testUMD.dll', der die nicht verwaltete DLL-Vorlage von RGiesecke verwendet, auf die in meinem vorherigen Beitrag in diesem Thread verwiesen wurde. Eingefügter Code mit System; using System.Text; using RGiesecke.DllExport; using System.Runtime.InteropServices; using System.Windows.Forms; Namespace testUnmanagedDLL {class Test {# 91; DllExport (AddInteger, CallingConvention = CallingConvention.StdCall) # 93; public static int AddInteger (int Value1, int Value2) {MessageBox.Show (Ganzzahlen hinzufügen: Value1.ToString () Value2.ToString ()); return (Wert1 Wert2); } # 91; DllExport (AddDouble, CallingConvention = CallingConvention.StdCall) # 93; public static double AddDouble (doppeltes Value1, doppeltes Value2) {MessageBox.Show (AddDouble: Value1.ToString () Value2.ToString ()); double Value3 = Value1 Value2; return (Wert3); } # 91; DllExport (AddDoubleString, CallingConvention = CallingConvention.StdCall) # 93; öffentliche statische Zeichenfolge AddDoubleString (double Value1, double Value2) {MessageBox.Show (AddDoubleString: Value1.ToString () Value2.ToString ()); double Value3 = Value1 Value2; return (Value3.ToString ()); } # 91; DllExport (returnString, CallingConvention = CallingConvention.StdCall) # 93; public static string returnString (string Eingabe) {MessageBox.Show (Received: Input); Rückkehr (SENDEN zu MT4); }}} Cursory Summary: Ganzzahlübergabe = Erfolg, doppelte Übergabe von MT4 an C # = Erfolg, doppelte Übergabe von C # an MT4 = Fehler, Zeichenfolgeübergabe = Erfolg. Ich habe nicht mit Arrays experimentiert. Beispielcode geschrieben mit VS 10 .NET 4.0. Wenn jemand weiß, wie man Dubletten erhält, ohne erfolgreich in einen String von C # nach MT4 konvertiert zu werden, bitte eine Nachricht in diesem Thread oder PM schreiben!

  3. #23
    FXEZ, ich mache ein bisschen Fortschritte. Ich konnte eine einfache Funktion aufrufen, wie Sie gezeigt haben, aber das Öffnen einer Named Pipe funktioniert momentan noch nicht. Ich habe von RGieseckes Exportmethode zu Selvin gewechselt (
    http://www.codeproject.com/Articles/...on-to-Unmanage). Beide sind ähnlich, aber ich fand es etwas einfacher, Selvins Methode zu finden. Die Lösung enthält die Dateien, die zum Erstellen der EXE-Datei und der abhängigen DLL erforderlich sind. Mein Fortschritt ist auf GitHub (
    https://github.com/jasonforex/MetaTraderBridge) damit jeder ein gezipptes Archiv des Projekts herunterladen oder beitragen kann. Sobald ich alles zum Laufen gebracht habe, werde ich den finalisierten Code hier veröffentlichen und das Projekt wird auch auf GitHub bleiben. Ich überprüfe diesen Thread immer noch täglich, falls irgendwelche Beiträge oder Ideen hier auftauchen. Das einzige, was ich meinem Repository hinzufügen muss, ist das Test-MT5-Skript, das ich verwende, aber das ist ziemlich einfach.

  4. #24

    Zitat Zitat von ;
    Ich mache ein bisschen Fortschritte. Ich konnte eine einfache Funktion aufrufen, wie Sie gezeigt haben, aber das Öffnen einer Named Pipe funktioniert momentan noch nicht. Ich habe von RGieseckes Exportmethode zu Selvin gewechselt (
    http://www.codeproject.com/Articles/...on-to-Unmanage). Beide sind ähnlich, aber ich fand es etwas einfacher, Selvins Methode zu finden. Die Lösung enthält die Dateien, die zum Erstellen der EXE-Datei und der abhängigen DLL erforderlich sind. Mein Fortschritt ist auf GitHub (
    https://github.com/jasonforex/MetaTraderBridge) ...
    Es scheint, dass wir uns auf ähnlichen Entwicklungspfaden befinden. Ich plane jedoch, Sockets für meine Implementierung anstelle von Named Pipes zu verwenden. Zu diesem Zeitpunkt denke ich an die Implementierung von Sockets in der C # -DLL und nicht direkt in MQL4. Ich habe vor, MT4 von Zeit zu Zeit mit der DLL zu verbinden, um zu überprüfen, ob neue Nachrichten empfangen wurden. In diesem Fall wird die DLL von MT4 angerufen, um diese Informationen abzurufen und dann die Trades zu platzieren bzw. die Positionen basierend auf den abgerufenen Anweisungen anzupassen. Nachdem Fills empfangen wurden, werden diese Informationen an die DLL übergeben und dann über Sockets an mein Steuerungsprogramm zurückgesendet, das auch Sockets in C # implementiert.

  5. #25
    FXEZ, ich stimme zu. Ich wollte nur mit Named Pipes beginnen, weil sie so einfach sind. Sobald ich damit fertig bin, möchte ich mehrere IPC-Typen (Sockets, Shared Memory und Remoting) implementieren.

  6. #26
    Hallo Leute, habt ihr das alles zum Laufen gebracht? Das ist so sehr cool. Kann der Skriptcode also auch für MT4 angewendet werden? Bitte lassen Sie mich wissen, dass es sich um Jungs handelt, an denen ich gerade arbeite, und auch Ihren Code mit dem Rest der Community hier teilen.

  7. #27
    Jason, gehst du immer noch an diesem Projekt? Ich habe die Sockets-Implementierung über DLL versucht, aber sagen wir mal, ich müsste vielleicht zurückkommen und noch einmal daran arbeiten.
    Ich habe mir jetzt die Named Pipes vorgenommen.
    Zum Thema ”C # -Dll für Metatrader” habe ich schließlich ein Beispielprojekt mit der Robert Giesecke-Methode ”Unmanaged C # -LL-Exporte” abgeschlossen
    http://vb6-to-csharp.blogspot.com/20...etatrader.htmldass jemand nützlich sein könnte. Es enthält ein herunterladbares Beispielprojekt mit dem Code. Sie sind richtig, dass der Umgang mit seiner nicht verwalteten Vorlage etwas komplizierter ist, wenn sie mit .Net 4.0 kompiliert werden soll.

  8. #28
    Ich habe mir eine Auszeit genommen, bin aber zu diesem Projekt zurückgekehrt und habe es funktioniert. Im Moment ist es immer noch sehr rau, aber ich werde es aufräumen. Ich werde versuchen, die Schritte zu beschreiben, die ich zum Funktionieren dieses Problems verwendet habe. 1)
    https://sites.google.com/site/robert...managedexports. Befolgen Sie seine Schritte zum Einfügen der ZIP-Datei, ziemlich einfach. 2)
    https://sites.google.com/site/robert...ds#TOC-Samples. Stellen Sie sicher, dass Sie das Projekt in Ihre Lösung aufnehmen (Rechtsklick, vorhandenes Projekt hinzufügen). Dieses Projekt enthält die EXE-Datei, um alle vtable-Korrekturen durchzuführen (mehr dazu weiter unten). 3) Öffnen Sie eine neue Lösung mit der Vorlage ”Unmanaged Export Library”, die Sie auf # 1 installiert haben. 4) Codieren Sie Ihre Funktionen mit den entsprechenden Direktiven, dh [DllExport, FunctionName)]. Ich empfehle Ihnen, ganz einfach zu starten, um sicherzustellen, dass Sie alles richtig eingerichtet haben. 5) Siehe die letzte Aussage. Wenn Sie dies nicht korrekt ausführen, wird in xxxx.dll die Fehlermeldung FunctionName nicht angezeigt. Dieser Schritt ermöglicht es tatsächlich, dass verwalteter Code von nicht verwaltetem Code verarbeitet wird und wo ich die meisten Probleme hatte und dies nicht einmal bemerkte. Das Beispiel, das RGiesecke gibt, ist gut, um Sie zum Laufen zu bringen, aber es fehlen einige Bereiche, meistens Streicher. Wenn Sie einen String an eine C # -Funktion übergeben möchten, übergeben Sie die Adresse des Strings und nicht den String selbst, dh die Funktion void (String str). Der schwierige Teil ist, dass Sie StringBuilder in .Net als Parametertyp und nicht als String verwenden müssen. Eingefügter Code # 91; DllExport (SetPipeName, CallingConvention.StdCall) # 93; static bool SetPipeName (# 91; In, MarshalAs (UnmanagedType.LPWStr) # 93; # 91; b # 93; # 91; u # 93; StringBuilder # 91;u # 93; # 91;b # 93; name ) {PipeName = name.ToString (); wahr zurückgeben; } Möchten Sie auf ein Eigenschaftsfeld in Ihrem Code zugreifen? Hier ist wie. Eingefügte private statische Zeichenfolge _serverName; Öffentlicher statischer String ServerName {# 91; return: MarshalAs (UnmanagedType.LPWStr) # 93; get {return _serverName; } set {_Servername = Wert; }} Was ist mit einer String-Funktion, die einen String zurückgibt? Fügen Sie einfach den Out-Parameter Inserted Code # 91 hinzu. DllExport (UpdatePipeName, CallingConvention.StdCall) # 93; statische Zeichenfolge UpdatePipeName (# 91; In, # 91; b # 93; # 91; u # 93; Out, # 91;u # 93; # 91;b # 93; MarshalAs (UnmanagedType.LPWStr) # 93; StringBuilder name) # 91; return: MarshalAs (UnmanagedType.LPWStr) # 93; {PipeName = name.ToString (); return PipeName; } Eines der anderen Probleme, die aufkamen, war am anderen Ende der Pipe, der Serverseite (ich behandle meine MT45-Terminals als meine Kunden). Stellen Sie sicher, dass Sie die Serverpipe mit dem richtigen PipeTransmissionMode eingerichtet haben. Sie möchten, dass die .Nachricht aktiv ist. Wenn Sie dies nicht tun, verbinden sich Ihre Pipes möglicherweise, verhalten sich aber nicht richtig. Die Serverseite bestimmt den Modus und .Message erlaubt sowohl Nachrichten- als auch Byteoperationen. Andere Links, auf die ich verwiesen habe:
    http://www.mql5.com/en/docs/basis/preprosessor/import
    http://docs.mql4.com/basis/variables/extfunctions
    http://www.mql5.com/en/articles/115?print=
    http://www.codeproject.com/Articles/...oduction-and-S* 5) Letzte und wichtigste: Stellen Sie sicher, dass Sie Ihr Post-Build-Ereignis richtig einrichten. Wenn Sie über ein Verzeichnis mit Leerzeichen verfügen, fügen Sie den Pfad in Anführungszeichen ein. Ich hatte den Pfad zu meiner kompilierten DllExport.exe-Pfad zu meiner DLL aus meinem ProjektDebug oderRelease

  9. #29
    Danke für die Zusammenfassung, Jason. Ich war mir der Konvention des String-Passing (Stringbuilder) oder Punkt Nr. 5 nicht bewusst, was möglicherweise die Ursache für einige meiner Probleme mit dieser Vorlage war. Das ist eine gute Information! Ich konnte mein eigenes C # Named Pipes Projekt erfolgreich zum Laufen bringen. Ich hatte anfängliche Probleme mit der Pipe-Sicherheit, aber nachdem ich Berechtigungen hinzugefügt hatte, gelang es, Named Pipes über ein lokales Netzwerk zu nutzen.

  10. #30
    Hast du das auch gesehen?
    http://beathespread.com/blog/view/14...ngodb-encog-eaEs kann sich lohnen, nach Ideen und Wegen zu suchen, um ein Order-Passing-Protokoll zu implementieren und andere Funktionen in C #, z. B. eine Datenbank, sowie den Zugriff auf mathematische Funktionen wie NN zu integrieren.

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