أنا لم تتح لي الفرصة للعمل على ذلك حتى الآن. أنا أيضا مندهش من أن أي شخص آخر قد chimed في.
أنا لم تتح لي الفرصة للعمل على ذلك حتى الآن. أنا أيضا مندهش من أن أي شخص آخر قد chimed في.
1 مرفق (ق) مرحبا جايسون ، هل حاولت مع Marshalling؟ كود PHP: <code> <span style = ”color: # 000000”> <span style = ”color: # 0000BB”> </span> <span style = ”color: # 007700”> # 91؛ </span> <span style = ”color: # 0000BB”> DllExport </span> <span style = ”color: # 007700”> (</span> <span style = ”color: # DD0000”> ”SendString” </span> <span style = ”color: # 007700”> ، </span> <span style = ”color: # 0000BB”> CallingConvention </span> <span style = ”color: # 007700”> = </span> <span style = ”color: # 0000BB”> CallingConvention </span> <span style = ”color: # 007700”>. </span> <span style = ”color: # 0000BB”> StdCall </span> <span style = ”color: # 007700”>) # 93 ؛
publicstatic </span> <span style = ”color: # 0000BB”> voidSendString </span> <span style = ”color: # 007700” > (# 91 ؛ </span> <span style = ”color: # 0000BB”> MarshalAs </span> <span style = ”color: # 007700”> (</span> <span style = ”color: # 0000BB ”> UnmanagedType </span> <span style =” color: # 007700 ”>. </span> <span style =” color: # 0000BB ”> LPWStr </span> <span style =” color: # 007700 ”> ) رقم 9 3 ؛ </span> <span style = ”color: # 0000BB”> stringargs </span> <span style = ”color: # 007700”>)
{
....... .......
..............
</span> <span style = ”color: # 0000BB”> </span> </span> </code> أيضا ، ماذا يقول ILDASM؟ هذا هو ما أراه .. (VS 2010 ،. NET 3.5) حظا سعيدا chriz
https://www.forexdrop.com/cryptocurr...trendline.html
Chriz ، سأعرض على مضض حداثيتي إلى C # هنا. لم أستخدم أبدًا ILDASM. لقد رأيت ذلك المشار إليه في العديد من المقالات ولكن لم يتم التعرف عليه بعد. إنه على قائمة المهام ولكن ليس بدرجة عالية بما فيه الكفاية حتى الآن لوقف التطوير على مشروعاتي الحالية. أنا على أمل أن أتمكن من وضع عدة ساعات في هذا المشروع في نهاية هذا الأسبوع. لقد جربت التوجيه الذي أدرجته و MT5 لا يزال يعطي نفس رسالة الخطأ. لم استخدم وظيفة MarshalAs بالرغم من ذلك. وسوف محاولة إعطائها. إذا نجح ذلك ، فستكون سؤالي التالي هو كيفية تمرير أنواع البيانات الأخرى مثل مزدوجة أو int. أتوقع صفائف ستكون الوحش الخاصة بهم وكذلك الأشياء. بداية ، أريد فقط أن أنواع البيانات التافهة ثم فقط بناء من ذلك الحين.
تحديث سريع: أقوم بإعداد نقطة GitHub حتى أتمكن من نشر الحل بالكامل ويمكن للأشخاص مشاهدة التغييرات التي تحدث. بمجرد الانتهاء من ذلك ، سأستأنف اختبارتصحيح هذا المشروع
حسنا ، لقد برزت أخيرا كيفية استخدام gitHub. كان لدي مجلد مخفي كان يدمر إعداداتي من محاولة سابقة للحصول على كل شيء. الآن بعد أن تم تشغيلها ، سوف أستخدمها لتحديث الكود هنا لنشر المنطق وراء الحل. * edit - add link *: gitHub link:
https://github.com/jasonforex/MetaTraderBridge
FXEZ ، أحقق بعض التقدم. لقد تمكنت من استدعاء وظيفة بسيطة مثل كنت قد أظهرت ولكن فتح ماسورة مسماة لا يزال لا يعمل في الوقت الحالي. لقد تحولت من طريقة RGiesecke للتصدير إلى Selvin (
http://www.codeproject.com/Articles/...on-to-Unmanage). كلاهما متشابهان لكني وجدت طريقة سيلفين أسهل قليلاً في العمل. يتضمن الحل الملفات الضرورية لإنشاء .exe و dll التابعة. تقدمي هو على GitHub (
https://github.com/jasonforex/MetaTraderBridge) بحيث يمكن لأي شخص تنزيل أرشيف مضغوط للمشروع أو المساهمة فيه. بمجرد أن أعمل كل شيء ، سأقوم بإعادة نشر الشفرة النهائية هنا وسيبقى المشروع على GitHub أيضًا. ما زلت أتحقق من هذا الموضوع يوميًا في حالة ظهور أي مساهمات أو أفكار هنا. الشيء الوحيد الذي أحتاج إلى إضافته إلى مستودعي هو نص اختبار MT5 الذي أستخدمه ولكن هذا بسيط للغاية.
يبدو أننا على مسارات التنمية مماثلة. ومع ذلك ، أخطط لاستخدام مآخذ للتنفيذ بدلاً من أنابيب الاتصال المسماة. في هذا الوقت أنا أفكر في تنفيذ مآخذ في DLL C # بدلاً من مباشرة في MQL4. أخطط لمجرد اتصال MT4 إلى DLL من وقت لآخر للتحقق مما إذا تم تلقي أي رسائل جديدة. إذا كان الأمر كذلك ، سيتم إجراء مكالمة على DLL من MT4 لاسترداد تلك المعلومات ثم لوضع الصفقاتضبط المواقف بناءً على التوجيهات التي تم استردادها. بعد تلقي التعبئات ، سيتم تمرير هذه المعلومات إلى DLL ، ثم إرسالها عبر مآخذ إلى برنامج التحكم الخاص بي الذي يطبق أيضا مآخذ في C #.Originally Posted by ;
FXEZ ، أنا أوافق. أردت فقط أن أبدأ بالأنابيب المسماة بسبب بساطتها. وبمجرد الحصول على هذا العمل ، فإن خطتي هي تنفيذ عدة أنواع IPC (مآخذ ، ذاكرة مشتركة ، واتصال عن بُعد).
جايسون ، هل مازلت تسير في هذا المشروع؟ حاولت تنفيذ مآخذ عبر DLL ولكن دعنا نقول فقط قد تضطر إلى العودة والعمل على ذلك مرة أخرى.
أضع مشاهد الآن على أنابيب مسمّاة.
حول موضوع مشروع C # dll لمشروع Metatrader ، توصلت أخيراً إلى إكمال مشروع عينة باستخدام طريقة Griecke للتصدير C # DLL غير المدارة في
http://vb6-to-csharp.blogspot.com/20...etatrader.htmlقد يجدها شخص مفيد. يحتوي على مشروع نموذج قابل للتنزيل مع الرمز. أنت على صواب أن التعامل مع القالب غير المدارة هو أمر صعب بعض الشيء في الحصول على ترجمة باستخدام .Net 4.0.
أخذت بعض الوقت ، لكن عدت إلى هذا المشروع وأعمله. ما زال الأمر صعبًا جدًا الآن لكني سأقوم بتنظيفه. سأحاول وصف الخطوات التي استخدمتها للحصول على هذا العمل. 1)
https://sites.google.com/site/robert...managedexports. اتبع خطواته حول مكان وضع ملف .zip ، سهل جدًا. 2)
https://sites.google.com/site/robert...ds#TOC-Samples. تأكد من تضمين المشروع في الحل الخاص بك (انقر بزر الماوس الأيمن ، إضافة مشروع موجود). سيوفر هذا المشروع. exe للقيام بكافة إصلاحات vtable (المزيد على ذلك أدناه) 3) فتح حل جديد باستخدام قالب ”مكتبة التصدير غير المدارة” الذي قمت بتثبيته في # 1. 4) رمز وظائفك مع التوجيهات المناسبة ، أي [DllExport ، FunctionName]] ستكون نصيحتي للبدء في غاية البساطة للتأكد من إعداد كل شيء بشكل صحيح. 5) انظر البيان الأخير. إذا لم تقم بذلك بشكل صحيح ، فسوف تحصل على خطأ FunctionName غير موجود في xxxx.dll. تسمح هذه الخطوة فعليًا باستهلاك الشفرة التي تتم إدارتها بواسطة تعليمات برمجية غير مُدارة وحيث كنت أواجه معظم المشكلات ولم أتمكن من تحقيقها. المثال الذي يعطيه RGiesecke جيد للحصول على الذهاب ولكن تفتقر إلى مجالات الزوجين ، ومعظمهم من السلاسل. إذا كنت تريد تمرير سلسلة إلى دالة C # ، فأنت تقوم بتمرير عنوان السلسلة ، وليس السلسلة نفسها ، أي void Function (str str). الجزء الصعب هو أنك تحتاج إلى استخدام StringBuilder في .Net كنوع المعلمة ، وليس السلسلة. كود مدرج # 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؛ الاسم ) {PipeName = name.ToString ()؛ عاد صحيح } هل ترغب في الوصول إلى حقل خاصية في شفرتك؟ إليك الطريقة. Inserted code private static string _serverName؛ سلسلة ثابتة عامة ServerName {# 91؛ return: MarshalAs (UnmanagedType.LPWStr) # 93؛ احصل على {return _serverName؛ } عيّن {_serverName = value؛ }} ماذا عن وظيفة السلسلة التي ترجع سلسلة؟ فقط قم بإضافة المعلمة Out Insert Code # 91؛ DllExport (UpdatePipeName، CallingConvention.StdCall) # 93؛ static string UpdatePipeName (# 91؛ In، # 91؛ b # 93؛ # 91؛ u # 93؛ Out، # 91؛u # 93؛ # 91؛b # 93؛ MarshalAs (UnmanagedType.LPWStr) # 93؛ اسم StringBuilder) # 91 ؛ return: MarshalAs (UnmanagedType.LPWStr) # 93؛ {PipeName = name.ToString ()؛ عودة } واحدة من القضايا الأخرى التي ظهرت على الطرف الآخر من الأنبوب ، جانب الخادم (أنا أعمل محطات MT45 الخاصة بي كعملائي). تأكد من إعداد أنبوب الخادم باستخدام PipeTransmissionMode الصحيح. تريد رسالة نشطة. إذا لم تقم بذلك ، فقد تتصل الأنابيب الخاصة بك ولكنك لن تتصرف بشكل صحيح. يحدد جانب الخادم الوضع ويسمح .Message بكلا من عمليات الرسائل والبايت. روابط أخرى أشرت إليها:
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) الأهم والأكثر أهمية: تأكد من إعداد حدث إنشاء المشاركة بشكل صحيح. إذا كان لديك موقع دليل يحتوي على مسافات ، فقم بتضمين علامات اقتباس حول المسار. بالنسبة إلي ، كان لدي مسار مسار DllExport.exe الخاص بي برمجي إلى .dll من مشروعيDebug أوRelease