Memanggil pipa bernama dll dari MT5. Bagaimana caranya?
Halaman 1 dari 464 123 ... TerakhirTerakhir
Results 1 to 10 of 31

Thread: Memanggil pipa bernama dll dari MT5. Bagaimana caranya?

  1. #1
    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

  2. #2
    saya tidak mengkodekan c #, dan saya tidak pernah menggunakan mt5. tapi tebakan saya adalah bahwa tipe string mt5 tidak setara dengan string c # Anda []. mungkin mencoba mengerjakan ulang sehingga mereka menggunakan beberapa pointer array generik sebagai gantinya.

  3. #3
    Itu sebabnya saya mengatakan tidak masalah jika saya mencoba untuk melewati tipe data yang berbeda. Saya sudah mencobanya dengan int dan double juga. Aku bahkan belum masuk ke dalam array. Baris yang memiliki Main (string [] args) dikomentari karena garis itu digunakan ketika saya ingin menjalankan kode sebagai exe, bukan kompilasi ke sebuah dll.

  4. #4

    Quote Originally Posted by ;
    Itu sebabnya saya mengatakan tidak masalah jika saya mencoba untuk melewati tipe data yang berbeda. Saya sudah mencobanya dengan int dan double juga. Aku bahkan belum masuk ke dalam array. Baris yang memiliki Main (string [] args) dikomentari karena garis itu digunakan ketika saya ingin menjalankan kode sebagai exe, bukan kompilasi ke sebuah dll.
    mata saya buram dan saya benar-benar membaca teks Anda dengan cara yang berbeda dari yang Anda maksudkan. salahku. saya masih memiliki kecurigaan bahwa dalam dll Anda, Anda perlu menggunakan jenis pointer untuk menerima alamat. saya tidak percaya Anda dapat melewatkan data dari luar dll dengan cara yang Anda miliki. tetapi sekali lagi Anda menyarankan itu bekerja ketika memuat dari exe lain, hanya tidak mt5 .... jadi saya akan diam dan berhenti menebak.

  5. #5
    Haha ... kadang-kadang hal ini menjadi buram, saya setuju. Saat menuju C # ke C #, saya dapat memasukkan teks di Konsol.Readline dan Console.Writeline dan mengisinya di sisi lain melalui pipa stre. Tidak diperlukan pointer. Sekarang jika saya bisa mencari cara untuk mendapatkan MQL5 untuk melakukan hal yang sama. Saya tahu saya bukan yang pertama yang mencoba ini jadi mudah-mudahan jika anggotaforexfabrikasidapat membantu mendapatkan pekerjaan ini, semua orang akan dapat menggunakannya.

  6. #6
    ini menggelitik rasa ingin tahu saya (terima kasih untuk btw itu). tampaknya c # adalah iblis. dari pustaka naive bacaan saya tidak sama dengan pustaka c dan seterusnya. seluruh aspek .net mengubah permainan.
    http://www.vistax64.com/net-general/...c-project.htmljika Anda dapat menulis dll di c , atau fuck, bahkan delphi (mungkin salah satu kompilator pascal gratis yang beredar saat ini), maka Anda dapat menghemat satu ton sakit kepala.

  7. #7
    Kemampuan untuk mendapatkan ini ditulisbekerja dengan C # adalah keharusan mutlak. Peta jalan utama untuk apa ini akan bekerja dengan C # berbasis. No C # adalah deal breaker dalam situasi saya. Saya tidak berpikir perpustakaan C # adalah masalah besar. Saya sudah memiliki klien dan server berbicara ketat melalui C # (pada dasarnya langsung dari MSDN). Saat itulah saya memperkenalkan MT5 bahwa semuanya menjadi buruk. Seseorang di sini harus dapat melihat berita kecil sederhana yang saya lewatkan. Sampai saat itu,

  8. #8
    Quote Originally Posted by ;
    Kemampuan untuk mendapatkan ini ditulisbekerja dengan C # adalah keharusan mutlak. Peta jalan utama untuk apa ini akan bekerja dengan C # berbasis. No C # adalah deal breaker dalam situasi saya. Saya tidak berpikir perpustakaan C # adalah masalah besar. Saya sudah memiliki klien dan server berbicara ketat melalui C # (pada dasarnya langsung dari MSDN). Saat itulah saya memperkenalkan MT5 bahwa semuanya menjadi buruk. Seseorang di sini harus dapat melihat berita kecil sederhana yang saya lewatkan. Sampai saat itu,
    Saya hanya menyarankan bahwa mql membacamenulis ke bagian pipa berada di c sebagai jembatan keluar dari mt5 ke OS dan pipa. itu seharusnya hanya menjadi dll kecil yang murni dirancang untuk membacamenulis ke pipa dan tidak lebih. Setelah itu, apa pun yang Anda lakukan di aplikasi utama c # Anda tidak relevan karena Anda dapat membacamenulis ke pipa dari dalam aplikasi Anda seperti biasa. masalah Anda tampaknya, dari apa yang bisa saya katakan, bahwa .net perpustakaan tampaknya berbeda dengan bagaimana hal itu di jaman dulu, dan saya mengasumsikan mql45 didasarkan pada pustaka c , bukan .net libraries. ini mungkin relevan, dan mungkin solusi yang lebih baik. saya tidak membaca semuanya tetapi tampaknya mungkin menjadi solusi mql5:
    http://www.mql5.com/en/articles/115Lagi pula, saya pikir saya kehabisan ide.

  9. #9
    Saya sangat akrab dengan artikel itu. Itu yang saya gunakan pertama tetapi mencoba untuk mendapatkan NamedPipeServerStream () fungsi dengan semua overloader cocok adalah mimpi buruk. Saya bahkan mencoba untuk benar-benar dasar dengan ini: Disisipkan Kode # 91; DllExport (Tambah, CallingConvention = CallingConvention.StdCall) # 93; int int static public Tambahkan (kiri kiri, kanan int) {kembali ke kiri kanan; } Kode MQL untuk menambahkan dua bilangan bulat: Kode Disisipkan #import PipeServer.dll int Tambah (kiri int, kanan int); #import/ --------------------------------------------- --------------------- /| Program skrip memulai fungsi |/ ----------------------------------------------- ------------------- void OnStart () {untuk (int i = 0; ilt; 3; i ) {Print (Add (i, 10)); }} Saya masih mendapatkan kesalahan yang sama. Tampaknya tidak peduli apakah itu fungsi yang kompleks seperti membacamenulis kedari pipa atau fungsi tambah sederhana. Saya pikir saya menyebutnya malam!

  10. #10

    Quote Originally Posted by ;
    Saya sangat akrab dengan artikel itu. Itu yang saya gunakan pertama tetapi mencoba untuk mendapatkan NamedPipeServerStream () fungsi dengan semua overloader cocok adalah mimpi buruk. Saya bahkan mencoba untuk benar-benar dasar dengan ini: Disisipkan Kode # 91; DllExport (Tambah, CallingConvention = CallingConvention.StdCall) # 93; int int static public Tambahkan (kiri kiri, kanan int) {kembali ke kiri kanan; } MQL kode untuk menambahkan dua bilangan bulat: [kode] #import PipeServer.dll int Tambahkan (kiri int, kanan int); #import/ --------------------------------------------- --------------------- /| ...
    Anda tampaknya akan tentang ini dengan cara yang salah ... masalah Anda, seperti yang saya mengerti, adalah bahwa mql45 mungkin tidak dirancang dengan .net dalam pikiran (murni spekulasi saya sendiri) dan sebagai gantinya mengharapkan jenis librari Win32 ketika mencoba untuk mengimpor. JIKA asumsi saya benar maka Anda dapat terus mencoba melakukan hal ini dengan cara yang sama sepanjang tahun dan tidak mendapatkan apa-apa. artikel yang saya tautkan menunjukkan cara mengimplementasikan kelas mql5 yang akan langsung menangani pemanggilan pipa kernel32.dll dan yang lainnya. Anda mencoba untuk memasukkan tidak pernah-akan-bekerja-mudah (atau mungkin pernah) .net dll ke dalam skrip mql5 untuk menangani penanganan pipa, tetapi Anda hanya bisa melakukan penanganan pipa secara langsung DALAM mql5 tanpa mengimpor apa pun selain kernel32 . tampaknya Anda benar-benar dapat memotong masalah menyinggung mencoba mengimpor dll tertentu yang tidak cocok dengan metodologi mengimpor mql5. salin kode di artikel dan hanya mengimpor kernel32 (jika saya membacanya dengan benar). maka hanya lakukan semua penanganan pipa Anda langsung di dalam mql5. apakah itu karena .net dll yang berbeda atau tidak, Anda harus mencoba berurusan dengan penanganan pipa langsung dalam mql5 bukannya terjebak di blok jalan saat ini karena tidak dapat mengimpor dll yang menyinggung. lagi, saya tidak terbiasa dengan mql5 dan c # jadi saya bisa berbicara omong kosong. sunting: lihat juga contoh kode mql4 ini dan salintempel dan kerjakan ulang seperlunya untuk memijatnya ke mql5 jika kode itu tidak 100% kompatibel: http://www.forum.com/showthread.php?t = 125117

Similar Threads

  1. Bagaimana broker dapat menghasilkan uang dari kontes
    By estehhyo in forum Pialang Forex
    Balasan: 31
    Postingan Terakhir: 08-04-2023 16:24, 04:24 PM
  2. Balasan: 5
    Postingan Terakhir: 12-14-2021 11:01, 11:01 AM
  3. Bagaimana saya bisa menghentikan MT4 dari memperbarui secara otomatis
    By v4hwas in forum Pembicaran Bitcoin dan Mata Uang Kripto
    Balasan: 7
    Postingan Terakhir: 12-07-2021 19:25, 07:25 PM
  4. IBFX Bernama Penyedia FX Online Terbaik
    By Haqehyvet in forum Pialang Forex
    Balasan: 6
    Postingan Terakhir: 11-01-2021 23:26, 11:26 PM
  5. Membantu! - Bagaimana caranya agar trailing stop tidak mengambil kerugian saat laba negatif?
    By HYitthyeweed in forum Pembicaran Bitcoin dan Mata Uang Kripto
    Balasan: 5
    Postingan Terakhir: 10-20-2009 14:51, 02:51 PM

Izin Posting

  • Anda tidak boleh memposting thread baru
  • Anda tidak boleh memposting balasan
  • Anda tidak boleh memposting lampiran
  • Anda tidak boleh menyunting postingan Anda
  •  
  • Kode BB Aktif
  • Smilies Aktif
  • Kode [IMG] Aktif
  • Kode [VIDEO] Aktif
  • Kode HTML tidak aktif
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.