هدفي النهائي هو أن أتمكن من استخدام منصات متعددة MT45 لإطعام تطبيق مخصص مكتوب في C #.

كود مدرج MT5 | | \MT5 - الصندوق الأسود C # programlt ؛ --- MT5\ | | MT5
في هذه اللحظة ، لا يفعل الصندوق الأسود أي شيء. أنا أعمل فقط على communiion.

لدي Client.cs و Server.cs تتحدث بنجاح مع بعضها البعض. عندما أقوم بإخراج PipeServer إلى .dll ومحاولة تحميله في MT5 ، أحصل على الخطأ ، لا يمكن العثور على 'SendString' في 'PipeServer.dll'. لقد جربت كل ما أفكر فيه. لقد قرأت العديد من المقالات على الإنترنت وما زلت أتجول في الدوائر.

رمز C # لـ PipeServer: (لا تمانع في كل التعليقات. إنه يسهل فقط التبديل بين dll و exe)
كود تم ادخاله باستخدام النظام باستخدام System.Collections.Generic باستخدام System.Linq ؛ باستخدام System.Text؛ باستخدام System.IO.Pipes ؛ باستخدام System.IO ؛ باستخدام System.Diagnostics. باستخدام System.Runtime.InteropServices؛ باستخدام RGiesecke.DllExport ؛ namespace PipeServer {public class Server {/static void Main (string # 91؛ # 93؛ args) # 91؛ DllExport (SendString، CallingConvention = CallingConvention.StdCall) # 93؛ الفراغ الثابت العام SendString (سلسلة args) {باستخدام (NamedPipeServerStream pipeServer = new NamedPipeServerStream (testpipe ، PipeDirection.InOut)) {//Console.WriteLine (كائن NamedPipeServerStream إنشاء.)؛/انتظر عميل للاتصال/Console.Write (انتظار اتصال العميل ...)؛ pipeServer.WaitForConnection ()؛/Console.WriteLine(Client connected.)؛/bool Disconnect = false؛ جرب {//قراءة إدخالات المستخدم وإرسالها إلى عملية العميل. باستخدام (StreamWriter sw = new 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 (وسائط)؛/}}}/Catch the IOException that raised that if the pipe is broken or disconnected. ch (IOException e) {Console.WriteLine (ERROR: {0}، e.Message)؛ }}}}}
رمز C # لـ PipeClient:
كود تم ادخاله باستخدام النظام باستخدام System.Collections.Generic باستخدام System.Linq ؛ باستخدام System.Text؛ باستخدام System.IO.Pipes ؛ باستخدام System.IO ؛ باستخدام System.Diagnostics. namespace PipeClient {public class Client {static void Main (string # 91؛ # 93؛ args) {using (NamedPipeClientStream pipeClient = new NamedPipeClientStream (.، testpipe، PipeDirection.InOut)) {//Connect to the pipe or wait until the pipe متاح. Console.Write (محاولة الاتصال بـ pipe ...)؛ pipeClient.Connect ()؛ Console.WriteLine (Connected to pipe.)؛ Console.WriteLine (يوجد حاليًا {0} مثيلات ملقم أنابيب مفتوحة. ، pipeClient.NumberOfServerInstances)؛ بينما (pipeClient.IsConnected) {باستخدام (StreamReader sr = new StreamReader (pipeClient)) {//قم بعرض نص القراءة إلى وحدة التحكم في سلسلة المفاتيح؛ while ((temp = sr.ReadLine ())! = ) {Console.WriteLine (Received from server: {0}، temp)؛ }}}} Console.Write (اضغط على Enter للمتابعة ...)؛ Console.ReadLine ()؛ }}}
رمز MQL5 لـ EAscript:
Inserted Code/ --------------------------------------------- --------------------- /| TestPipeServer.mq5 |/| حقوق الطبع والنشر ، لا شيء |/| |/ ----------------------------------------------- ------------------- /# property script_show_inputs #import PipeServer.dll vatic static void SendString (string args)؛ #import/ --------------------------------------------- --------------------- /| البرنامج النصي بدء وظيفة |/ ----------------------------------------------- ------------------- void OnStart () {Print (test loaded correct)؛ SendString (اختبار)؛/إذا قمت بالتعليق على هذه الدعوة وظيفة ، ويعمل البرنامج النصي}/--------------------------------- ---------------------------------
الاختبار C # lt ؛ - يعطي C # صبيبًا يزيد عن 165،000 علامةثانية دون أي تغيير في الأداء. هذا هو أحد الأسباب الرئيسية التي أرغب في استخدام حل DLL. كما أن التطوير في C # أقل تقييدًا بكثير. أفهم أن هناك طرقًا لاستخدام شفرة MQL5 الأصلية ، لكن هذا ليس المسار الذي أسلكه.


لذا فإن سؤالي الإجمالي هو كيف يمكنني الاتصال بـ SendString الخاص بي بشكل صحيح (سلسلة someParameter)؟
لا يهم في الوقت الحالي نوع البيانات التي أرسلها. يمكن أن يكون int أو مزدوج أو سلسلة. أنا فقط أريد الحصول على وظيفة تعمل.


أي مساعدة أو اقتراحات سيكون موضع تقدير كبير حتى أتمكن من التوقف


شكر،

جايسون