Mi objetivo final es poder usar múltiples plataformas MT45 para alimentar una aplicación personalizada escrita en C #.

Código insertado MT5 | | \MT5 - caja negra C # programlt; --- MT5\ | | MT5
Por el momento, la caja negra no hace nada. Solo estoy trabajando en la comunicación.

Tengo Client.cs y Server.cs correctamente hablando entre ellos. Cuando envío PipeServer a un archivo .dll e intento cargar en MT5, aparece el error, No puedo encontrar 'SendString' en 'PipeServer.dll'. He intentado todo lo que puedo pensar. He leído numerosos artículos en línea y todavía estoy dando vueltas en círculos.

Código C # para PipeServer: (no importa todos los comentarios. Simplemente hace que sea más fácil alternar entre dll y exe)
Código insertado usando el sistema; utilizando System.Collections.Generic; utilizando System.Linq; utilizando System.Text; utilizando System.IO.Pipes; utilizando System.IO; utilizando System.Diagnostics; utilizando System.Runtime.InteropServices; utilizando RGiesecke.DllExport; espacio de nombres PipeServer {public class Server {//static void Main (string # 91; # 93; args) # 91; DllExport (SendString, CallingConvention = CallingConvention.StdCall) # 93; public static void SendString (cadena args) {using (NamedPipeServerStream pipeServer = new NamedPipeServerStream (testpipe, PipeDirection.InOut)) {//Console.WriteLine(NamedPipeServerStream creado objeto.);/Espere a que un cliente se conecte/Console.Write(Waiting for client connection ...); pipeServer.WaitForConnection ();/Console.WriteLine(Client conectado.);/bool Disconnect = false; intente {//Lea la entrada del usuario y envíela al proceso del cliente. utilizando (StreamWriter sw = new StreamWriter (pipeServer)) {//string temp;/while (pipeServer.IsConnected! Disconnect)/{sw.AutoFlush = true;/Console.Write(Ingrese texto:);/temp = Console.ReadLine ();/if (temp == exit) Disconnect = true;/Desconectar = verdadero; sw.WriteLine (args);/}}}/Detecta la excepción IOException que se genera si el conducto/está roto o desconectado. ch (IOException e) {Console.WriteLine (ERROR: {0}, e.Message); }}}}}
Código C # para el PipeClient:
Código insertado usando el sistema; utilizando System.Collections.Generic; utilizando System.Linq; utilizando System.Text; utilizando System.IO.Pipes; utilizando System.IO; utilizando System.Diagnostics; espacio de nombres PipeClient {clase pública Cliente {static void Main (string # 91; # 93; args) {using (NamedPipeClientStream pipeClient = new NamedPipeClientStream (., testpipe, PipeDirection.InOut)) {//Conectar a la tubería o esperar hasta que la tubería está disponible. Console.Write (Intentando conectar a la tubería ...); pipeClient.Connect (); Console.WriteLine (Conectado a la tubería.); Console.WriteLine (Actualmente hay {0} instancias de servidor de tuberías abiertas., PipeClient.NumberOfServerInstances); while (pipeClient.IsConnected) {using (StreamReader sr = new StreamReader (pipeClient)) {//Muestra el texto leído a la cadena de la consola temp; while ((temp = sr.ReadLine ())! = ) {Console.WriteLine (Recibido del servidor: {0}, temp); }}}} Console.Write (Presione Entrar para continuar ...); Console.ReadLine (); }}}
Código MQL5 para EAscript:
Código insertado/ --------------------------------------------- --------------------- /| TestPipeServer.mq5 |/| Copyright, NINGUNA |/| |/ ----------------------------------------------- ------------------- /# property script_show_inputs #import PipeServer.dll static void SendString (string args); #import///--------------------------------------------- --------------------- /| Función de inicio del programa de script |/ ----------------------------------------------- ------------------- void OnStart () {Print (prueba cargada correctamente); SendString (prueba);/si comento esta llamada de función, el script funciona}/ --------------------------------- ---------------------------------
Prueba de C # lt; - C # ofrece un rendimiento de más de 165,000 ticssegundo sin ningún ajuste de rendimiento. Esta es una de las razones principales por las que quiero usar una solución DLL. Además, el desarrollo en C # es mucho menos restrictivo. Entiendo que hay maneras de usar el código nativo de MQL5 pero esa no es la ruta que estoy siguiendo.


Entonces, mi pregunta general es ¿cómo puedo llamar correctamente a mi SendString (string someParameter)?
No importa en este momento qué tipo de datos envío. Puede ser un int, doble o cadena. Solo quiero que la funcionalidad funcione.


Cualquier ayuda o sugerencia sería muy apreciada para que pueda parar.


Gracias,

Jason