Mijn uiteindelijke doel is om meerdere MT45-platforms te kunnen gebruiken voor het voeden van een aangepaste toepassing die is geschreven in C #.
Code MT5 ingevoegd | | \MT5 - zwarte doos C # programlt; --- MT5\ | | MT5
Op dit moment doet Black Box niets. Ik werk gewoon aan het communiion.
Ik heb de Client.cs en Server.cs met succes met elkaar gepraat. Wanneer ik PipeServer uitvoer naar een .dll en probeer te laden in MT5, krijg ik de fout. Kan 'SendString' niet vinden in 'PipeServer.dll'. Ik heb alles geprobeerd wat ik kan bedenken. Ik heb talloze online artikelen gelezen en ben nog steeds in cirkels rond.
C # code voor PipeServer: (let niet op alle reacties, het maakt het eenvoudig om heen en weer te schakelen tussen dll en exe)
Code ingevoegd met behulp van systeem; met behulp van System.Collections.Generic; met behulp van System.Linq; met behulp van System.Text; met behulp van System.IO.Pipes; met behulp van System.IO; met behulp van System.Diagnostics; met behulp van System.Runtime.InteropServices; met behulp van RGiesecke.DllExport; namespace PipeServer {public class Server {//static void Main (string # 91; # 93; args) # 91; DllExport (SendString, CallingConvention = CallingConvention.StdCall) # 93; public static void SendString (string args) {using (NamedPipeServerStream pipeServer = new NamedPipeServerStream (testpipe, PipeDirection.InOut)) {//Console.WriteLine (NamedPipeServerStream-object gemaakt.);/Wacht tot een client verbinding maakt met/Console.Write (wachten op clientverbinding ...); pipeServer.WaitForConnection ();/Console.WriteLine (Client connected.);/bool Disconnect = false; probeer {//lees gebruikersinvoer en stuur die naar het clientproces. using (StreamWriter sw = nieuwe StreamWriter (pipeServer)) {//string temp;/while (pipeServer.IsConnected! Disconnect)/{sw.AutoFlush = true;/Console.Write (voer tekst in:);/temp = Console.ReadLine ();/if (temp == exit) Disconnect = true;/Disconnect = true; sw.WriteLine (args);/}}}/Vang de IOException die wordt verhoogd als de pipe/broken of disconnected is. ch (IOException e) {Console.WriteLine (ERROR: {0}, e.Message); }}}}}
C # code voor de PipeClient:
Code ingevoegd met behulp van systeem; met behulp van System.Collections.Generic; met behulp van System.Linq; met behulp van System.Text; met behulp van System.IO.Pipes; met behulp van System.IO; met behulp van System.Diagnostics; naamruimte PipeClient {public class Client {static void Main (string # 91; # 93; args) {using (NamedPipeClientStream pipeClient = new NamedPipeClientStream (., testpipe, PipeDirection.InOut)) {//Verbinden met de pijp of wachten tot de pijp is beschikbaar. Console.Write (probeert verbinding te maken met pipe ...); pipeClient.Connect (); Console.WriteLine (Verbonden met pipe.); Console.WriteLine (Er zijn momenteel {0} pipe server-instances geopend., PipeClient.NumberOfServerInstances); while (pipeClient.IsConnected) {using (StreamReader sr = new StreamReader (pipeClient)) {//Toon de gelezen tekst aan de console string temp; while ((temp = sr.ReadLine ())! = ) {Console.WriteLine (ontvangen van server: {0}, temp); }}}} Console.Write (Druk op Enter om door te gaan ...); Console.ReadLine (); }}}
MQL5-code voor EAscript:
Code ingevoegd/ --------------------------------------------- --------------------- /| TestPipeServer.mq5 |/| Copyright, NONE |/| |/ ----------------------------------------------- ------------------- /# eigenschap script_show_inputs #import PipeServer.dll static void SendString (string args); #import/ --------------------------------------------- --------------------- /| Scriptstart-startfunctie |/ ----------------------------------------------- ------------------- ongeldig OnStart () {Afdrukken (test correct geladen); SendString (test);/als ik deze functieaanroep ken, werkt het script}/ --------------------------------- ---------------------------------
Testen van C # lt; - C # geeft een doorvoer van meer dan 165.000 tikkenseconde zonder enige aanpassing van de prestaties. Dit is een van de belangrijkste redenen waarom ik een DLL-oplossing wil gebruiken. Ook is het ontwikkelen in C # veel minder beperkend. Ik begrijp dat er manieren zijn om native MQL5-code te gebruiken, maar dat is niet het pad dat ik nastreer.
Dus mijn algemene vraag is hoe ik mijn SendString correct noem (string someParameter)?
Het maakt op dit moment niet uit welk gegevenstype ik verzend. Het kan een int, double of string zijn. Ik wil gewoon dat de functionaliteit werkt.
Alle hulp of suggesties zouden zeer gewaardeerd worden, dus ik kan stoppen
Bedankt,
Jason