Grafik modunda MQL için bir GUI oluşturma. - sayfa 5

 

İşte bir EA ile 10 dakikada bir keskin üzerine çizilmiş basit bir şekil örneği. Form, soketler, dosyalar vb. olmadan yerel bir dll'de olduğu gibi doğrudan EA'dan grafikten keneler alır. Ayrıca, form tabloya eklenmiştir. Eklentiyle ilgili çözülmesi gereken bir sorun var. Ama ekleyemezsiniz, burada kim onu severse.

 
Алексей Барбашин :

İşte bir EA ile 10 dakikada bir keskin üzerine çizilmiş basit bir şekil örneği. Form, soketler, dosyalar vb. olmadan yerel bir dll gibi, doğrudan Expert Advisor'dan grafikten keneler alır. Ayrıca, form tabloya eklenmiştir. Eklentiyle ilgili çözülmesi gereken bir sorun var. Ama ekleyemezsiniz, burada kim onu severse.

GitHub'dan hangi derleyiciyi kullandığını söyle. Yoksa keskin derlemeyi ellerinizle mi düzenlediniz? İncir gerekli. Karışık kodda (yönetilen + yönetilmeyen) C++ DLL yazmak daha kolaydır.

 
Yuriy Asaulenko :

GitHub'dan hangi derleyiciyi kullandığını söyle. Yoksa keskin derlemeyi ellerinizle mi düzenlediniz? İncir gerekli. Karışık kodda (yönetilen + yönetilmeyen) C++ DLL yazmak daha kolaydır.

Bir önceki gönderide yazmıştım: her şey normal VS yoluyla yapılır. VS 2017 Topluluğunu kullanıyorum. Sadece projeyle çalışmanın başlangıcında, Nuget'li DllExport kitaplığı ona bağlanır. Projeyi derledikten sonra, AT ALL kelimesinden elle sonuçlandırılması gereken hiçbir şey yoktur.

Şablonu R.Giesecke'den önermiyorum . İşte onunla bir tef ile gerçek danslar, eğer başlatabilirseniz. Bu kütüphane ile farkı hissetmeyeceksiniz bile. Normal derleme sırasında dll'niz kendi kendine "yerel hale gelecektir".

 
Алексей Барбашин :

Bir önceki gönderide yazmıştım: her şey normal VS yoluyla yapılır. VS 2017 Topluluğunu kullanıyorum. Sadece projeyle çalışmanın başlangıcında, Nuget'li DllExport kitaplığı ona bağlanır. Projeyi derledikten sonra, AT ALL kelimesinden elle sonuçlandırılması gereken hiçbir şey yoktur.

Evet, evet, aynen Nuget ile. Bana uymadı, ancak C-API ile etkileşim için standart olmayan bir DLL, + daha fazla geri arama işlevi vardı. Bilmiyorum, nedense bunun bir derleyici olduğunu veya başka bir çözüm olduğunu hatırlıyorum.

Ve bu durumda, çözüm gerçekten iyi ve basit.

 
Алексей Барбашин :

Neden soldaki? Her şey standart VS araçlarıyla yapılır. Nuget, derlemenin bir parçası olarak System.Runtime.InteropServices sınıfını bir kez değiştiren DllExport kitaplığına sahiptir ve ardından her şey normal şekilde derlenir. Yani tef dansı gerekmez, sarmalayıcılar gerekli değildir. Maxim'in önerdiği gibi, c#'ta form oluşturmak, onları ek bir dosyaya yazmaktan çok daha kolaydır. Maxim'e ve çalışmalarına saygı duyuyorum, ancak bu durumda Net dünyası ek zorluklar olmadan bize açık.

İlginç, kendin kontrol ettin mi? Bir keresinde MT4 - C ++ dll - C# dll bağlantısı yapmıştım, direkt olarak C# dll yükleyemedim.

https://www.nuget.org/packages/DllExport/ - öyle mi?

DllExport 1.6.0
DllExport 1.6.0
  • www.nuget.org
The open implementation of unmanaged exports for .NET ( DllExport )        Source code and all details here: https://github.com/3F/DllExport                To configure projects via current package:        ========================================================        DllExport -action Configure -dxp-version 1.6.0...
 
Алексей Барбашин :

Bir önceki gönderide yazmıştım: her şey normal VS yoluyla yapılır. VS 2017 Topluluğunu kullanıyorum. Sadece projeyle çalışmanın başlangıcında, Nuget'li DllExport kitaplığı ona bağlanır. Projeyi derledikten sonra, AT ALL kelimesinden elle sonuçlandırılması gereken hiçbir şey yoktur.

Şablonu R.Giesecke'den önermiyorum . İşte onunla bir tef ile gerçek danslar, eğer başlatabilirseniz. Bu kütüphane ile farkı hissetmeyeceksiniz bile. Normal derleme sırasında dll'niz kendi kendine "yerel hale gelecektir".

İsim, detaylandırabilir misin? Örnekteki görev, C# dilinde bir danışmandan bilgi alan ve ona komutlar gönderen bir panel yapmaktır. Bunun için dllexport nasıl kullanılır?

Çiğnemeye gerek yok, sadece adımlar, birbirleriyle ne ve nasıl tepki veriyor?

 
Alexey Volchanskiy :

İlginç, kendin kontrol ettin mi? Bir keresinde MT4 - C ++ dll - C# dll bağlantısı yapmıştım, direkt olarak C# dll yükleyemedim.

https://www.nuget.org/packages/DllExport/ - öyle mi?

Tabii ki kontrol ettim. Yukarıda bir form ile dll oluşturma örneğini verdim.

 
Алексей Барбашин :

Tabii ki kontrol ettim. Yukarıda bir form ile dll oluşturma örneğini verdim.

Bu resim bir örnek mi?

Tamam, kendim çözeceğim.

 
Alexey Volchanskiy :

Adaş, daha spesifik olabilir misin? Örnekteki görev, C# dilinde bir danışmandan bilgi alan ve ona komutlar gönderen bir panel yapmaktır. Bunun için dllexport nasıl kullanılır?

Çiğnemeye gerek yok, sadece adımlar, birbirleriyle ne ve nasıl tepki veriyor?

1. c# Class Library'de (net Framework) bir proje oluşturun

2. NuGet'ten DllExport kitaplığını projeye ekleyin. Sunucudan indirmek daha iyidir. Toplu iş dosyasını proje klasörüne koyun.

3. Bu kitaplığı komut satırı aracılığıyla çalıştırın (hub'da bir video var) ve System.Runtime.InteropServices sınıfını değiştirin.

Bu, tüm hazırlıkları tamamlar. Projeyi yeniden başlatmak

4. Dışa aktarılan bir işlev oluşturun ve ondan önce [DllExport] değiştiricisini yazın.Adım 3 doğru bir şekilde gerçekleştirilirse, derleyici değiştiriciye küfretmez

5. Projeye bir form ekleyin, gerektiği gibi düzenleyin.

6. Dışa aktarılan işlevler sınıfına (1. adımda oluşturulan) bir form açma işlevi ekleyin, örneğin Başlat

7. Windows formunda bir uygulama oluştururken ana fonksiyonda yapıldığı gibi bir form açma fonksiyonu oluşturuyoruz, örneğin OpenDialog

8. Başlat işlevinde, OpenDialog işlevini çalıştırılabilir bir yöntem olarak belirlediğimiz bir iş parçacığı oluşturun.

9. Bir Uzman Danışman/gösterge/komut dosyası oluşturun ve dll'yi her zamanki gibi bağlayın. ))

10 mql'den Başlat işlevini çağırın

Form ayrı bir iş parçacığında çalışacak ve normal bir kalıcı iletişim kutusunun yapacağı gibi, işlemin mql'de durmasına neden olmayacak.

Verileri mql'den bir forma geçirmek, uygulamanın sınıfları ve iş parçacıkları arasında veri aktarmakla aynı şekilde yapılır.

1. "exported" sınıfında mql'nin veri aktarmak için çağıracağı bir fonksiyon oluşturun, örneğin SendTick

Unutulmamalıdır ki mql yalnızca [DllExport] değiştiricisi ayarlanmış sınıf yöntemlerini (işlevlerini) görecektir.

2. Bu sınıftaki parametrelerle bir olay temsilcisi oluşturun

3. Formdaki ihracat sınıfı etkinliğine abone olun

4. SendTick yöntemini mql'den çağırırken, parametreleri geçerek oluşturulan olayı çağırırız

5. Formda, oluşturulan işleyici ile "olayı durdururuz" ve verileri formda görüntüleriz veya başka bir şey yaparız.

Herşey. Başka bir şey gerekli değildir.

Her ihtimale karşı, form ve dışa aktarma sınıfının farklı iş parçacıklarında çalıştığını hatırlatmama izin verin, bu nedenle forma bilgi yerleştirmek için komşu bir iş parçacığından bir veri işleme temsilcisine ihtiyacınız olacak.

Kim başarılı olursa, lütfen "sonucu" ve basitliğin izlenimlerini paylaşın. )))

Tüm bu işte en "zor" kütüphanenin kurulumu olacaktır. )))

 
Alexey Volchanskiy :

Bu resim bir örnek mi?

Tamam, kendim çözeceğim.

Alexey, detaylı boyadım. )) Hala sorularınız varsa, sorun, cevaplamaya çalışacağım!