استدعاء أنابيب الاتصال المسماة dll من MT5. كيف؟
الصفحة 1 من 489 123 ... الأخيرةالأخيرة
Results 1 to 10 of 31

Thread: استدعاء أنابيب الاتصال المسماة dll من MT5. كيف؟

  1. #1
    هدفي النهائي هو أن أتمكن من استخدام منصات متعددة 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 أو مزدوج أو سلسلة. أنا فقط أريد الحصول على وظيفة تعمل.


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


    شكر،

    جايسون

  2. #2
    هذا منزعج فضول بلدي (شكرا لهذا راجع للشغل). يبدو ج # هو الشيطان. من سادتي قراءة المكتبات c # ليست هي نفسها مثل مكتبات C وهكذا. الجانب كله .net يغير اللعبة.
    http://www.vistax64.com/net-general/...c-project.htmlإذا كان بإمكانك كتابة dll في c ، أو اللعنة ، حتى دلفي (ربما واحد من مجمعي pascal المجاني العائم في هذه الأيام) ، فإنك قد تنقذ نفسك من الصداع.

  3. #3
    القدرة على كتابة هذاالعمل مع C # هي ضرورة مطلقة. وستكون خارطة الطريق النهائية لما سيعمل به هذا هو C #. لا C # هو كسر صفقة في وضعي. لم أكن أعتقد أن مكتبات C # كانت القضية الكبرى. لدي بالفعل العميل والخادم يتحدث بدقة من خلال C # (أساسا مباشرة من MSDN). عندما أعرض MT5 أن الأمور تسوء. شخص ما هنا يجب أن يكون قادرًا على تحديد الشيء الصغير البسيط الذي أفتقده. حتى ذلك الوقت،

  4. #4

    Quote Originally Posted by ;
    أنا على دراية جيدة بهذه المقالة. هذا هو واحد كنت استخدم لأول مرة ولكن في محاولة للحصول على وظيفة NamedPipeServerStream () مع كل من المحملين المتطابقين كان كابوس. أنا حتى أحاول أن أذهب الأساسية تماما مع هذا: أدخل رمز # 91 ؛ DllExport (إضافة ، CallingConvention = CallingConvention.StdCall) # 93؛ public static int Add (int left، int right) {return left right؛ } رمز MQL لإضافة عدد صحيح اثنين: [code] #import PipeServer.dll int إضافة (int left، int right)؛ #import/ --------------------------------------------- --------------------- /| ...
    يبدو أنك تسير في هذه الطريقة الخاطئة ... مشكلتك ، كما أفهمها ، هي أنه ربما لم يتم تصميم mql45 مع .net في الاعتبار (مجرد تكهنات بلدي) وبدلا من ذلك تتوقع نوع win32 من المكتبات عند محاولة نعم. إذا كان الافتراض الخاص بي صحيحًا ، فيمكنك الاستمرار في محاولة القيام بذلك بنفس الطريقة طوال العام ولن تصل إلى أي مكان. وأظهر المقال أنا مرتبطة كيفية تنفيذ فئة mql5 التي ستتعامل مباشرة مع استدعاء الأنابيب kernel32.dll و whatnot. كنت تحاول إدراج dll-gonna-work- بسهولة (أو ربما من أي وقت مضى) .net dll في برنامج نصي mql5 للتعامل مع التعامل مع الأنابيب ، ولكن بدلاً من ذلك يمكنك فقط أن تقوم بمعالجة الأنبوب مباشرة داخل mql5 دون استيراد أي شيء آخر غير kernel32 . يبدو أنك يمكن أن تقطع تماما قضية المخالفة لمحاولة استيراد دلل معين لا يتناسب فقط مع منهجية استيراد mql5. نسخ التعليمة البرمجية في المقال واستيراد kernel32 فقط (إذا قرأتها بشكل صحيح). ثم قم فقط بمعالجة كل الأنبوب الخاص بك مباشرة داخل mql5. سواء كان ذلك بسبب كون .net dll مختلفًا أم لا ، يجب أن تحاول التعامل مع معالجة الأنبوب مباشرة داخل mql5 بدلاً من أن تكون عالقة في كتلة الطريق الحالية لعدم قدرتك على استيراد ملف DLL المخالف. مرة أخرى ، أنا غير مألوف مع mql5 و c # حتى يمكن أن أتحدث مجموع القرف. تحرير: أيضا إلقاء نظرة على هذا المثال رمز mql4 ونسخلصق وإعادة العمل عند الضرورة لتدليكها في mql5 إذا لم يكن رمز متوافق 100 ٪: http://www.forum.com/showthread.php؟t = 125117

  5. #5

    Quote Originally Posted by ;
    Chriz ، سأعرض على مضض حداثيتي إلى C # هنا. لم أستخدم أبدًا ILDASM. لقد رأيت ذلك المشار إليه في العديد من المقالات ولكن لم يتم التعرف عليه بعد. إنه على قائمة المهام ولكن ليس بدرجة عالية بما فيه الكفاية حتى الآن لوقف التطوير على مشروعاتي الحالية. أنا على أمل أن أتمكن من وضع عدة ساعات في هذا المشروع في نهاية هذا الأسبوع. لقد جربت التوجيه الذي أدرجته و MT5 لا يزال يعطي نفس رسالة الخطأ. لم استخدم وظيفة MarshalAs بالرغم من ذلك. وسوف محاولة إعطائها. إذا كان هذا لا يعمل ، فإن سؤالي التالي سيكون ...
    أعتقد أنه نشر بالفعل كل هذه الروابط وناقش القضايا الرئيسية ، ولكن منذ فترة وجيزة كتبت هذا الموجز القصير والسهل لفهم
    http://vb6-to-csharp.blogspot.com/20...etatrader.htmlفي حال تمكنت من القيام بذلك بنفسي (ما زلت لم أفعل). يرجى الإبلاغ عن كيف ستسير الامور!

  6. #6
    جيسون ، هل عرفت كيف تقوم بإنشاء ملف C # DLL الخاص بك و نسميه MT4؟ لقد تم الآن tinkering معها في الساعات القليلة الماضية ، ويمكن مشاركة بعض التعليمات البرمجية إذا أردت: رمز MT4 Script 'testDLL' أدناه: ملف testUMD.dll المضافة إلى مجلداتمجلدات المكتبية Codeed #import testUMD.dll int AddInteger (int Value1، int Value2)؛ مضاعفة AddDouble (قيمة مزدوجة 1 ، قيمة Value2 مزدوجة) ؛ string AddDoubleString (Double Value1، double Value2)؛ string stringString (سلسلة الإدخال) ؛ #import/ --------------------------------------------- --------------------- /| البرنامج النصي لبدء وظيفة |/ ----------------------------------------------- ------------------- int start () {//---- Print (AddInteger: AddInteger (250، 750))؛ double a = AddDouble (250،750)؛ طباعة (AddDouble: NormalizeDouble (a، 4))؛ double d = StrToDouble (AddDoubleString (250، 750))؛ Print (AddDoubleString: NormalizeDouble (d، 4))؛ temp string = إرسال إلى DLL؛ recv = returnString (درجة الحرارة)؛ طباعة (ريكف)؛/---- return (0)؛ } C # code for 'testUMD.dll' باستخدام قالب RGiesecke Unmanaged DLL المشار إليه في المنشور السابق في سلسلة الرسائل هذه. كود تم ادخاله باستخدام النظام باستخدام System.Text؛ باستخدام RGiesecke.DllExport ؛ باستخدام System.Runtime.InteropServices؛ باستخدام System.Windows.Forms namespace testUnmanagedDLL {class Test {# 91؛ DllExport (AddInteger، CallingConvention = CallingConvention.StdCall) # 93؛ public static int AddInteger (int Value1، int Value2) {MessageBox.Show (Add Integers: Value1.ToString () Value2.ToString ())؛ return (Value1 Value2)؛ } # 91؛ DllExport (AddDouble، CallingConvention = CallingConvention.StdCall) # 93؛ public static double AddDouble (double Value1، double Value2) {MessageBox.Show (AddDouble: Value1.ToString () Value2.ToString ())؛ double Value3 = Value1 Value2؛ return (Value3)؛ } # 91؛ DllExport (AddDoubleString، CallingConvention = CallingConvention.StdCall) # 93؛ السلسلة الثابتة العامة 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؛ returnString سلسلة عامة ثابتة (سلسلة الإدخال) {MessageBox.Show (المتلقاة: الإدخال)؛ return (إرسال إلى MT4) ؛ }}} ملخص عشري: Integer pass = success ، تمرير مزدوج MT4 إلى C # = نجاح ، تمرير مزدوج من C # إلى MT4 = فشل ، تمرير سلسلة = نجاح. لم أجرب المصفوفات. نموذج التعليمات البرمجية المكتوبة مع VS 10. NET 4.0. إذا كان أي شخص يعرف كيفية الحصول على مضاعفات يمر دون تحويل إلى سلسلة من C # إلى MT4 بنجاح ، يرجى إسقاط ملاحظة في هذا الموضوع أو PM!

  7. #7
    مرحبا يا شباب ، كل هذا حصل على هذا العمل؟ هذا يكون رائع جدا. هل يمكن أيضًا تطبيق شفرة البرنامج النصي لـ MT4 أيضًا؟ واسمحوا لي أن أعرف اللاعبين من نوع ما أعمل عليه وكذلك TKS الكثير وأيضا مشاركة التعليمات البرمجية الخاصة بك مع بقية المجتمع هنا.

  8. #8
    أيضا هل رأيت هذا؟
    http://beathespread.com/blog/view/14...ngodb-encog-eaقد يكون من المفيد البحث عن أفكار وطرق لتنفيذ بروتوكول تمرير أمر وطريقة لتضمين قدرات أخرى في C # ، مثل قاعدة بيانات ، والوصول إلى وظائف الرياضيات مثل NN.

  9. #9
    نعم ، أنا على دراية بـ Encog. كان هذا هو الدافع لي للتوصل إلى طريقة لتمرير الكثير من المعلومات محليًا وبسرعة. أنا لم أتعمق في قواعد البيانات حتى الآن الحق الآن CSV يفعل كل ما أحتاجه.

  10. #10
    أنا لا رمز في ج # ، وأنا لم تستخدم أبدا mt5. لكن تخميني هو أن نوع سلسلة mt5 لا يعادل سلسلة c # الخاصة بك []. ربما حاول إعادة صياغة ذلك بحيث يستخدمون بعض مؤشر مجموعة عامة بدلا من ذلك.

أذونات النشر

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  
  • رمز BB مفعل
  • الابتسامات مفعلة
  • رمز[IMG] مفعل
  • رمز [VIDEO] مفعل
  • رمز HTML غير مفعل
This website uses cookies
We use cookies to store session information to facilitate remembering your login information, to allow you to save website preferences, to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners.