"Linux'te MetaTrader 5" makalesi için tartışma - sayfa 24

 
Herkese merhaba!
64-bit Ubuntu 20.04.6 LTS'de wine-8.0.1 üzerinde Metatrader 5 build 3815 çalıştırıyorum.
Uzman Danışmanımda, içe aktarılan C# DLL'den (.NET Framework 4.8) bir işlev kullanıyorum. Dışa aktarılan işlevin ne yaptığına bakılmaksızın, Uzman ilk başlattığımda iyi çalışıyor ve ikinci kez Metatrader 5 çöküyor. Hata ayıklayıcı, Metatrader 5 çökmeden önce Uzman'daki kesme noktalarına asla ulaşmıyor.
Görünüşe göre DLL ile ilgili bazı kaynaklar Uzman başlatma işleminden sonra serbest bırakılmıyor.
Bunu düzeltmenin bir yolu var mı?

C# DLL kodu:
namespace Test
{
    public static class TestStatic
    {
        public static string TestFunc()
        {
            return "test return value";
        }
    }
}
Uzman Danışman kodu:
#import "Test.dll"
#import

int OnInit()
  {
   // bu satır kullanılırsa 2. çalıştırma çökmesi
   Print("DLL function result: ", TestStatic::TestFunc());
   
   // bu satır kullanılırsa 2. çalıştırma çökmesi olmaz
   //Print("no DLL functions used");
   
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason){}
void OnTick() {}

 
WStranger #:
Herkese merhaba!
64-bit Ubuntu 20.04.6 LTS'de wine-8.0.1 üzerinde Metatrader 5 build 3815 çalıştırıyorum.
Uzman Danışmanımda, içe aktarılan C# DLL'den (.NET Framework 4.8) bir işlev kullanıyorum. Dışa aktarılan işlevin ne yaptığına bakılmaksızın, Uzman ilk başlattığımda iyi çalışıyor ve ikinci kez Metatrader 5 çöküyor. Hata ayıklayıcı, Metatrader 5 çökmeden önce Uzman'daki kesme noktalarına asla ulaşmaz.
Görünüşe göre DLL ile ilgili bazı kaynaklar Uzman başlatma işleminden sonra serbest bırakılmıyor.
Bunu düzeltmenin bir yolu var mı?

C# DLL kodu:
Uzman Danışman kodu:

Sanırım windows'u yeniden başlatmak işe yarayacaktır...


 
Dominik Christian Egert #:
Sanırım windows'u yeniden başlatmak işe yarayacaktır...


Denedim, işe yaramadı. Terminal başlangıcından bu yana her ikinci EA başlatması, wineboot'tan sonra bile bir çökme ile sonuçlanıyor
 
WStranger #:
Denedim, işe yaramadı. Terminal başlangıcından bu yana her ikinci EA başlatması, wineboot'tan sonra bile bir çökme ile sonuçlanıyor
Emin değilim ama sanırım windows'ta da aynı sorunu yaşadım....

Ama nasıl çözdüğümü hatırlamıyorum. Ya da bu konuda çözdüysem....

EA'yı nasıl sonlandırıyorsunuz?
 
WStranger #:
Herkese merhaba!
64-bit Ubuntu 20.04.6 LTS'de wine-8.0.1 üzerinde Metatrader 5 build 3815 çalıştırıyorum.
Uzman Danışmanımda, içe aktarılan C# DLL'den (.NET Framework 4.8) bir işlev kullanıyorum. Dışa aktarılan işlevin ne yaptığına bakılmaksızın, Uzman ilk başlattığımda iyi çalışıyor ve ikinci kez Metatrader 5 çöküyor. Hata ayıklayıcı, Metatrader 5 çökmeden önce Uzman'daki kesme noktalarına asla ulaşmaz.
Görünüşe göre DLL ile ilgili bazı kaynaklar Uzman başlatma işleminden sonra serbest bırakılmıyor.
Bunu düzeltmenin bir yolu var mı?

C# DLL kodu:
Uzman Danışman kodu:

Evet, sorunun ne olduğunu biliyorum.

DLL'niz yükleme ve boşaltma mesajlarını düzgün bir şekilde işlemiyor.

DLL'lerin düzgün yüklenmesi ve boşaltılması için gerekli minimum kodu eksik bırakıyorsunuz.


 

Dominik Christian Egert #:

EA'yı nasıl sonlandırırsınız?

Bir grafikten manuel olarak siliyorum veya hata ayıklayıcı ile durduruyorum - sonuç her iki durumda da aynı.

Dominik Christian Egert#:

DLL'lerin düzgün bir şekilde yüklenmesi ve boşaltılması için gerekli minimum kodu kaçırıyorsunuz.
Bunun nasıl düzgün yapılacağını açıklayan herhangi bir spesifikasyonunuz veya kod örneğiniz var mı? Çünkü MQL5 spesifikasyonu aksini söylüyor. Ayrıca benim deneyimlerim de aksini söylüyor: Birden fazla MQL5 projesinde .NET kütüphaneleri kullanıyorum ve Windows 8.1/10/11'de beklendiği gibi çalışıyor.
 
WStranger #:

Bir grafikten manuel olarak siliyorum veya hata ayıklayıcı ile durduruyorum - sonuç her iki durumda da aynı.

Bunun nasıl düzgün yapılacağını açıklayan herhangi bir spesifikasyonunuz veya kod örneğiniz var mı? Çünkü MQL5 spesifikasyonu aksini söylüyor. Ayrıca benim deneyimlerim de aksini söylüyor: NET kütüphanelerini birden fazla MQL5 projesinde kullanıyorum ve Windows 8.1/10/11'de beklendiği gibi çalışıyor.

DÜZENLE:

https:// learn.microsoft.com/en-us/windows/win32/dlls/dllmain
 
WStranger #:

Bir grafikten manuel olarak siliyorum veya hata ayıklayıcı ile durduruyorum - sonuç her iki durumda da aynı.

Bunun nasıl düzgün yapılacağını açıklayan herhangi bir spesifikasyonunuz veya kod örneğiniz var mı? Çünkü MQL5 spesifikasyonu aksini söylüyor. Ayrıca benim deneyimlerim de aksini söylüyor: Birden fazla MQL5 projesinde .NET kütüphaneleri kullanıyorum ve Windows 8.1/10/11'de beklendiği gibi çalışıyor.
Muhtemelen bulacağınız şey, DLL'nin sonlandırılan işlemden ayrılmadığıdır.

Bu sorunla mysqlclient.dll ile mücadele ediyordum ve strateji test edicisinin DLL'yi temiz bir şekilde ayırmadığını anlayabildim. Daha çok Terminal'in aslında DLL'i yüklediği ve yüklü kaldığı yer gibi görünüyor.

Lütfen bu konuda biraz araştırma yapın, çünkü bugün itibariyle çalışmadıkları için artık eski istemci sürümlerini doğrulayamıyorum. Bu nedenle şu anda o zamanki sorunu yeniden üretme imkanım yok.
 
Dominik Christian Egert #:
Muhtemelen bulacağınız şey, DLL'nin sonlandırılan süreçten ayrılmadığıdır.

Bu sorunla mysqlclient.dll ile mücadele ediyordum ve strateji test edicinin DLL'yi temiz bir şekilde ayırmadığını anlayabildim. Daha çok Terminal'in DLL'yi yüklediği ve yüklendiği yerde kaldığı görülüyor.

Lütfen bu konuda biraz araştırma yapın, çünkü bugün itibariyle çalışmadıkları için artık eski istemci sürümlerini doğrulayamıyorum. Bu nedenle şu anda o zamanki sorunu yeniden üretme imkanım yok.
Yazıklar olsun bana. Metatrader 5 terminalini çalıştırdığım Wine önekinde .NET Framework'ün düzgün yüklenmediğini fark ettim. Yeniden yükledikten sonra DLL sorunu çözüldü.
Yine de yardımınız için teşekkürler!
WineHQ - .NET Framework 4.8
  • appdb.winehq.org
Open Source Software for running Windows applications on other operating systems.
 
WStranger #:
Yazıklar olsun bana. Metatrader 5 terminalini çalıştırdığım Wine önekinde .NET Framework'ün düzgün yüklenmediğini fark ettim. Yeniden yükledikten sonra DLL sorunu çözüldü.
Yine de yardımınız için teşekkürler!
Geri bildirimde bulunduğunuz için teşekkür ederim, bunu bilmiyordum.