"Yönetilmeyen dışa aktarmaları kullanarak C# kodunu MQL5'e gösterme" makalesi için tartışma - sayfa 4

 
MetaDriver:

Bir aydır utangaç bir şekilde mql5 üzerine topluluk tarafından doldurulacak bir wiki öğreticisi yapmamızı öneriyordum. Bu mega öğretici ile ilgili sorunları çözecektir. Hatta yazarlar özellikle ziyaret edilen makaleler için kredi ile ödüllendirilebilir.

Wiki motoru ücretsiz ve kullanılabilir.

// Metaquotes bunu yapmazsa, başka biri bunu harici bir sitede yapabilir. Ben kendi adıma bunu düşünüyorum.

Harici siteler için bir sorun var - materyalimiz üzerinde telif hakkımız var. Ve dışarıdan bir viki oluştururken, metnin neredeyse %100'ü bizim materyallerimizin kopyası olacaktır.

Herkese açık vikilerin bir ütopya olduğu iddia edilebilir. Kamuya açık vikiler fikri uzun süredir uygulamada gömülüdür. Topluluklarımızın ve belgelerimizin geliştirilmesi için ne kadar çaba harcadığımıza bakın. Bu çok fazla para ve günlük çalışma demek.

Sorunun çözümü, her kullanıcının terminaline zorunlu teslimat ile yönetilen içerik oluşturma alanında yatmaktadır. Bu, kitlesel alıştırma verimliliğini ihmal edilebilir %0,00x'ten çok gerçekçi %3-5'e çıkarır.

MQL5 materyallerinin hacmini ve bağlanabilirliğini günlük olarak artırıyoruz. Dokümantasyon projesi(MQL5 dili, yardım, çoklu dil) çalışmalarımızda çok büyük bir pay alıyor.

 
Renat:

Harici siteler için bir sorun var - materyallerimiz üzerinde telif hakkımız var. Ve harici bir wiki oluştururken, metnin neredeyse %100'ü bizim materyallerimizden kopyalanacaktır.

Herkese açık vikilerin bir ütopya olduğu iddia edilebilir. Herkese açık vikiler fikri uzun süredir uygulamada gömülüdür. Topluluklarımızın ve belgelerimizin geliştirilmesi için ne kadar çaba harcadığımıza bakın. Bu çok fazla para ve günlük çalışma demek.

Sorunun çözümü, her kullanıcının terminaline zorunlu teslimat ile yönetilen içerik oluşturma alanında yatmaktadır. Bu, kitlesel alıştırma verimliliğini ihmal edilebilir %0,00x'ten çok gerçekçi %3-5'e çıkarır.

MQL5 materyallerinin hacmini ve bağlanabilirliğini günlük olarak artırıyoruz. Dokümantasyon projesi(MQL5 dili, yardım, çoklu dil) çalışmalarımızda çok büyük bir pay alıyor.

Öğretici altında yarışmaları canlandırırsak ne olur? Sonuçta yeni gelenler bir ders kitabı istiyorlar.

Çok aşamalı bir yarışma yapın, katılımcılar kayıt olur, bir ders kitabı planı sunar, %50'si elenir, geri kalanların her birine 20 dolar ödenir, ikinci aşamaya geçilir vb.

Maratonun sonuna kadar az sayıda ama en iyi çalışmalarla sona ulaşılacaktır. Gerçek yaratım şartlarını yarım yıl olarak belirleyin, aşamalara bölün ve her şey yoluna girecektir.

 

Genel C++ ve .NET etkileşimi hakkında çok ilginç ve faydalı bir makale.

Uygulanacak en basit strateji "2.4. C++/Cli sarmalayıcı sınıfı", çünkü .NET API'sini C++/cli'de herhangi bir güçlük çekmeden kullanabilirsiniz, bu nedenle tek tutkal kodu "gcroot" tutan küçük ve basit bir sınıftır.

Bu yaklaşım, C#'ta MQL programlamaya izin veren bir kütüphane olan http://www.nquotes.net 'un uygulanması için bir zemin olarak seçilmiştir.

İlk sürüm sadece MQL4'ü desteklese de, gelecek sürümlerde kesinlikle MQL5'e taşınacaktır.

NQuotes : MetaTrader (MT4) and C#/.NET bridge
  • www.nquotes.net
Debugging in Visual Studio IDE is possible. You can inspect values, place breakpoints and inspect execution step by step. Have a nicer experience than "Print" debugging in pure MQL. Compatible API NQuotes has an API that is compatible with MQL. It is quite easy to get started for MQL4 developers, while others can use the official...
 

Harika bir makale, çok ama çok kullanışlı. Ama...

Visual Studio ile ilgili küçük bir hatam var. Şablonu kullanarak yeni bir proje oluşturursam ve derlersem, VS sorun yaşamıyor. Daha sonra yeni projeyi (derlenmiş dll dahil) diske, bir çözüm klasörüne kaydedebiliyorum. Dll sorunsuz çalışıyor. Ancak, VS'de kaydedilen projeye geri dönersem, dosya orada olmasına rağmen "RGiescke.DllExport.targets" projesinin bulunamamasından veya diskte olmamasından şikayet ediyor.

Sanırım bu proje dosyasıyla ilgili bir sorun.....

 

Çok iyi bir öğretici, bunu sevdim.

Çok teşekkürler.

[Silindi]  

Merhaba Investeo,

Bu makale için teşekkürler, çok faydalı oldu, ancak RGiesecke'den şablon kullanmaya çalışırken bazı sorunlarla karşılaştım gibi görünüyor.

Bir DLL oluşturduğumda ve inşa ettiğimde, GetProcAddress aracılığıyla onları bulabilmek ve çağırabilmek için dışa aktarılan işlevlerin adlarını kontrol etmek için DLL Dışa Aktarma Görüntüleyicisi'ni kullandım. Ne yazık ki DLL'nin kendisi LoadLibrary işlevi içinde iyi yükleniyor ancak GetProcAddress 127 - Function not found hatasını döndürüyor. Aynı zamanda DLL Dışa Aktarma Görüntüleyicisi fonksiyonlarımın hiçbirinin dışa aktarılmadığını gösteriyor ...

Lütfen kodumda neyin yanlış olabileceğini önerebilir misiniz?

using RGiesecke.DllExport;
using System.Runtime.InteropServices;

namespace ClassLibrary1
{
    public class Class1
    {
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

        [DllExport("Demo", CallingConvention = CallingConvention.StdCall)]
        public static void Demo()
        {
            MessageBox(new IntPtr(0), "Demo", "Demo", 0);
        } 
    }
}

Ve sonra Win 32 Konsol uygulamasında aşağıdakileri yapıyorum:

HMODULE x1 = LoadLibrary(L"ClassLibrary1.dll");

        if (!x1) 
        {
                MessageBox(0, L"ERROR", L"Library", 0);
                return 0;
        }

        FARPROC x2 = GetProcAddress(x1, "Demo");

        DWORD error = GetLastError();

        if (!x2) 
        {
                MessageBox(0, L"ERROR", L"Proc", 0);
                return 0;
        }

Teşekkürler, Art

 
Renat:

Bu arada, MetaTrader 5, birkaç yapı için .NET'te yazılmış DLL'lerden işlevleri yerel olarak içe aktarabiliyor

Bu desteği özel olarak ekledik ve artık geçici çözümler kullanmaya gerek yok.

Net fonksiyonlarının nasıl içe aktarılacağı hakkında bilgi bulamadım. Kim yapabilir, lütfen bir bağlantı veya basit bir örnek paylaşın.
 
a.p:
Net fonksiyonunun nasıl doğaçlama yapılacağı hakkında bilgi bulamıyorum. Kim yapabilir, lütfen bir bağlantı veya basit bir örnek paylaşın.

Editör gezgininde "Tüm dosya türlerini göster" seçeneğini açın, DLL'nizi bir fare ile tutun ve programın MQL5 penceresine atın.

Büyük olasılıkla sonuç sizi şaşırtacaktır.

Документация по MQL5: Программы MQL5
Документация по MQL5: Программы MQL5
  • www.mql5.com
Программы MQL5 - Документация по MQL5
 
Renat:

Editör gezgininde "Tüm dosya türlerini göster" seçeneğini açın, DLL'nizi fare ile tutun ve programın MQL5 penceresine atın.

Muhtemelen sonuç sizi şaşırtacaktır.

Harika.

DLL'deki tüm işlevleri bir kerede ekleyebilseydim.

 
Renat:

Editör gezgininde "Tüm dosya türlerini göster" seçeneğini açın, DLL'nizi fare ile tutun ve programın MQL5 penceresine atın.

Muhtemelen sonuç sizi şaşırtacaktır.

Denedim, MetaEditor çöküyor

Not:
Win8 Enterprise 64
MetaEditor build 842
.Net lib'nin bir işlevi vardır:
public static int Ekle(int değer1, int değer2)
{
değer1 + değer2 döndür;
}