Tujuan utama saya adalah untuk dapat menggunakan beberapa platform MT45 untuk memberi makan appliion kustom yang ditulis dalam C #.

Kode Disisipkan MT5 | | \MT5 - kotak hitam C # programlt; --- MT5\ | | MT5
Saat ini, kotak hitam tidak melakukan apa-apa. Saya hanya mengerjakan komuniion.

Saya memiliki Client.cs dan Server.cs berhasil berbicara satu sama lain. Ketika saya output PipeServer ke .dll dan mencoba untuk memuat di MT5, saya mendapatkan kesalahan, Tidak dapat menemukan 'SendString' di 'PipeServer.dll'. Saya telah mencoba semua yang dapat saya pikirkan. Saya sudah membaca banyak artikel online dan masih berputar-putar.

C # kode untuk PipeServer: (jangan pedulikan semua komentar. Ini hanya memudahkan untuk beralih antara dll dan exe)
Kode yang dimasukkan menggunakan Sistem; menggunakan System.Collections.Generic; menggunakan System.Linq; menggunakan System.Text; menggunakan System.IO.Pipes; menggunakan System.IO; menggunakan System.Diagnostics; menggunakan System.Runtime.InteropServices; menggunakan 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 = NamedPipeServerStream baru (testpipe, PipeDirection.InOut)) {//Console.WriteLine(NamedPipeServerStream objek dibuat.);/Tunggu klien untuk menghubungkan/Console.Write(Menunggu untuk koneksi klien ...); pipeServer.WaitForConnection ();/Console.WriteLine(Client terhubung.);/bool Disconnect = false; coba {//Baca masukan pengguna dan kirim itu ke proses klien. using (StreamWriter sw = new StreamWriter (pipeServer)) {//string temp;/while (pipeServer.IsConnected! Disconnect)/{sw.AutoFlush = true;/Console.Write(Enter teks:);/temp = Console.ReadLine ();/if (temp == exit) Disconnect = true;/Putuskan = true; sw.WriteLine (args);/}}}/Tangkap IOException yang dinaikkan jika pipanya rusak atau terputus. ch (IOException e) {Console.WriteLine (ERROR: {0}, e.Message); }}}}}
Kode C # untuk PipeClient:
Kode yang dimasukkan menggunakan Sistem; menggunakan System.Collections.Generic; menggunakan System.Linq; menggunakan System.Text; menggunakan System.IO.Pipes; menggunakan System.IO; menggunakan System.Diagnostics; namespace PipeClient {public class Client {static void Main (string # 91; # 93; args) {using (NamedPipeClientStream pipeClient = NamedPipeClientStream baru (., testpipe, PipeDirection.InOut)) {//Hubungkan ke pipa atau tunggu sampai pipa tersedia. Console.Write (Mencoba menyambung ke pipa ...); pipeClient.Connect (); Console.WriteLine (Terhubung ke pipa.); Console.WriteLine (Saat ini ada {0} instance server pipa terbuka., PipeClient.NumberOfServerInstances); while (pipeClient.IsConnected) {using (StreamReader sr = StreamReader baru (pipeClient)) {//Menampilkan teks yang dibaca ke temprat string konsol; while ((temp = sr.ReadLine ())! = ) {Console.WriteLine (Diterima dari server: {0}, temp); }}}} Console.Write (Tekan Enter untuk melanjutkan ...); Console.ReadLine (); }}}
Kode MQL5 untuk EAskrip:
Kode yang dimasukkan/ --------------------------------------------- --------------------- /| TestPipeServer.mq5 |/| Hak Cipta, NONE |/| |/ ----------------------------------------------- ------------------- /# properti script_show_inputs #import PipeServer.dll static void SendString (string args); #import/ --------------------------------------------- --------------------- /| Program skrip memulai fungsi |/ ----------------------------------------------- ------------------- void OnStart () {Print (tes dimuat dengan benar); SendString (tes);/jika saya berkomentar panggilan fungsi ini, skrip bekerja}/ --------------------------------- ---------------------------------
Pengujian C # lt; - C # memberikan throughput lebih dari 165.000 ticksdetik tanpa tweaking kinerja. Ini adalah salah satu alasan utama saya ingin menggunakan solusi DLL. Juga, berkembang di C # jauh kurang restriktif. Saya mengerti bahwa ada cara menggunakan kode native MQL5 tetapi itu bukan jalur yang saya incar.


Jadi pertanyaan saya secara keseluruhan adalah bagaimana saya benar memanggil saya SendString (string someParameter)?
Tidak masalah saat ini jenis data yang saya kirim. Ini bisa berupa int, double, atau string. Saya hanya ingin agar fungsinya berfungsi.


Setiap bantuan atau saran akan sangat dihargai sehingga saya bisa berhenti


Terima kasih,

Jason