İyi makale, ancak bazı büyük endişeleri gündeme getiriyor.
5. DLL calls wrapper and loss of speed on calls As already described above, every call of DLL functions is wrapped into a special wrapper in order to ensure safety. This binding masks the basic code, replaces the stack, supports stdcall / cdecl agreements and monitors exceptions within the functions called. This work inevitably leads to delay of the calling function. Therefore, it isn't recommended to perform very frequent DLL function calls (hundreds or thousands of times per second) for small operations. It' s better to make infrequent calls.
Dll'lerdeki istisnalar MT4'ün çökmesine neden olduğundan, bu MT4'ten başka bir değişikliktir, ancak iyi yazılmış kod bu senaryoyu ele almalıdır, bu tür sorunların üstesinden gelmek için dll'lerde güvenli kod yazma hakkında makaleler görmeyi tercih ederim. Yani şimdi kötü kodlama alışkanlıkları nedeniyle herkes bir performans maliyeti ödemek zorunda.
Eğer kene bazında çağrılan algoritma kütüphaneleriniz varsa bu çok çok kötü, onları işe yaramaz hale getirdiğini söylemeye cesaret edebilirim. MT5'te gördüğüm geri bildirimlerin çoğu, çoğunlukla insanların göstergeleri yeniden yazması gerektiğinden dolayı iyi değil. bu sadece çok fazla hayal kırıklığına neden olan başka bir öğedir ve performansı etkilediğini görünce, DLL'leri yoğun olarak kullanan benim gibi diğerlerinin mümkün olduğu kadar uzun süre MT4 ile kalacağını ve bunun sorun olmadığı başka bir platform arayacağını hayal ediyorum.
Metaquotes neden dll'leri güvenli bir şekilde çağırmak için biraz farklı bir yöntem ekleyemedi? Geliştirici daha sonra güvenli yükleme veya performans yüklemesi yoluyla yükleme yapmayı seçebilir ve istisnaları yakalayan iyi bir kod yazdığından emin olabilir.
"Seyrek çağrı yapmak daha iyidir" Yani cidden bu ne tür bir ifade
dll'i visual c++ express 2008 kullanarak derledim, ancak ilginç bir şekilde terminal istisna yakalamıyor, ancak fnReplaceString içinde çöküyor.
Terminal derlemem 239. Herhangi bir ipucu var mı?
dll'i visual c++ express 2008 kullanarak derledim, ancak ilginç bir şekilde terminal istisna yakalamıyor, ancak fnReplaceString içinde çöküyor.
Terminal yapım 239. Herhangi bir ipucu var mı?
Güzel bir makale, ancak bazı büyük endişeleri de beraberinde getiriyor.
Dll'lerdeki istisnalar MT4'ün çökmesine neden olduğundan, bu MT4'ten başka bir değişikliktir, ancak iyi yazılmış kod bu senaryoyu ele almalıdır, bu tür sorunların üstesinden gelmek için dll'lerde güvenli kod yazma hakkında makaleler görmeyi tercih ederim. Yani şimdi kötü kodlama alışkanlıkları nedeniyle herkes bir performans maliyeti ödemek zorunda.
Eğer kene bazında çağrılan algoritma kütüphaneleriniz varsa bu çok çok kötü, onları işe yaramaz hale getirdiğini söylemeye cesaret edebilirim. MT5'te gördüğüm geri bildirimlerin çoğu, çoğunlukla insanların göstergeleri yeniden yazması gerektiğinden dolayı iyi değil. bu sadece çok fazla hayal kırıklığına neden olan başka bir öğedir ve performansı etkilediğini görünce, DLL'lerin kapsamlı kullanımını kullanan benim gibi diğerlerinin mümkün olduğu kadar uzun süre MT4 ile kalacağını ve bunun sorun olmadığı başka bir platform arayacağını hayal ediyorum.
Metaquotes neden dll'leri güvenli bir şekilde çağırmak için biraz farklı bir yöntem ekleyemedi? Geliştirici daha sonra güvenli yükleme veya performans yüklemesi yoluyla yükleme yapmayı seçebilir ve istisnaları yakalayan iyi bir kod yazdığından emin olabilir.
"Seyrek arama yapmak daha iyidir" Yani cidden bu nasıl bir ifadedir
Bu topluluğun düzgün makaleler bulmakta zorlanması şaşırtıcı değil. İyi bir yazar buraya yazmak için zaman harcamakla uğraşmaz. Neden yapsınlar ki? Dll'lerin nasıl dahil edileceğini göstermek ve iletişim kurmak gibi düzgün bir şey yapıyorlar, sonra biri geliyor ve onları ağaçtan düşürüyor.
Görebildiğim kadarıyla, makalede iyi bir iş çıkarmış, bu yüzden belki de performans olması gereken yerde değil. ANCAK buradaki soru ya da sorun, eğer bu kadar kötüyse ve siz bu topluluğun bir parçasıysanız, neden bariz bir performans sorunu olarak bulduğunuz şeye bir çözüm kodlamaya çalışmıyorsunuz?
Bu konuyu gündeme getirmeniz iyi ve güzel, ancak çözüm sunmaya istekli değillerse, hatta hedefe nasıl ulaşılacağına dair önerilerde bulunmuyorlarsa, bu konuda şikayet etmenin kimseye bir faydası yok.
Makale riski ortaya çıkardı mı, evet, hatta başka bir kişi, hey ben bunu indirdim ve bununla ilgili bu sorunu yaşıyorum dediğinde bunun bir örneğini aldığımızı düşünüyorum. Bu da tam olarak makalede tartışılan sorun.Sanırım bu makaleyi genişletecek olsaydım, orada PFX'in söylediği gibi, nasıl güvenli bir şekilde etkileşime girileceğini göstermek olurdu. Bununla birlikte, riski ortaya çıkardı ve GÜVENLİK konusunun konsepti gereği sizin gibi birinin bunu genişletmesi için bolca alan bıraktı.
Yazara benden kişisel bir not, konuları yazarken acemi gibi terimlerden kaçınmaya çalışın. Bu hakaret ve aşağılayıcıdır, bilgeliğinizi takip etmesini istediğiniz kişilerden bahsetmenin profesyonel bir yolu değildir.
C++ dll ve C# dll arasındaki fark nedir.
Temel fark tasarımdır. c# dll assembly'si yönetilen kodu depolamak için kullanılır ve c++ dll'si yerel kod içerir.
Ancak assembly import etmeyi mümkün kılan bir hile var: Inverse P/Invoke.
Bana gelince, bu amaç için c++\cli wrapper dll yazmaya veya c++\cli kullanarak tüm yönetilen kodu yazmaya alışkınım.
Bana C++ kütüphanesine yapı aktarmayı gösterebilir misiniz?
Bu kodu MQL5DLLSample.cpp'ye eklemeye çalışıyorum:
------------------------
struct MqlTick
{
INT64 Time;
double Bid;
double Ask;
double Last;
UINT64 Volume;
};
_DLLAPI MqlTick __stdcall MyTick(MqlTick &my)
{
my.Teklif = 1;
return(my);
}
------------------------
Ardından, bu kodu MQL5DLL Test.mq5 dosyasına ekliyorum (içe aktarma bölümü)
MqlTick MyTick(MqlTick &tick);
ve OnTick() içinde çağırmak
MqlTick tick;
SymbolInfoTick("GBPUSD", tick);
MyTick(tick);
Print("My tick: ",tick.bid);
------------------------
C++ kütüphanesinin ve EA'nın derlenmesi hatasızdır.
Terminalde MyTick(tick) fonksiyonunu çağırdıktan sonra hata alıyorum: MQL5DLL_Test (EURUSD,M1) Erişim ihlali 0x00000008'e yazma
Merhaba ve bu faydalı makale için teşekkür ederim.
mql5 ve mysql arasında veri alışverişi yapmak için küçük bir dll oluşturmaya çalıştım.
Bu yüzden farklı adımları takip ettim ve bazı hatalar aldım.
Dll c++ dilindedir
İlki minGW ile uyumluydu
Ex5 bunu açamadı çünkü 64 bit derlenmiş bir dll değildi
Bu yüzden minGW 64 bit ile derliyorum
İlk dll'im (çok basitti) çalışıyor
Bazı eklemeler vs. yapıyor.
Mysql kütüphanesini kullanmaya çalıştığımda, dll'imi sorunsuz bir şekilde oluşturmak için derleyebiliyorum
Ancak ex5'i çağırarak açmaya çalıştığımda aşağıdaki hatayı alıyorum:
C:\user......\DLLNAME.dll açılamıyor (193)
Bunu düzeltmek için bir fikriniz var mı?
Çok teşekkürler
Herkese merhaba,
harika makale!
ama merak ediyorum, bu makalede anlatılan şeyi biraz tersten yapmama yardımcı olabilecek biri var mı: metatrader'dan C ++ programına veri (tik veya çubuk verileri) almak?
Bunu standart bir int dizisiyle çalıştırdım, ancak Visual Studio C++'a bir CArrayObj / CArrayDouble geçirmek mümkün mü?

- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Yeni makale Veri Değişimi Nasıl Yapılır? 10 Dakikada MQL5 için bir DLL yayınlandı:
Artık pek çok geliştirici basit bir DLL'nin nasıl yazılacağını ve farklı sistem bağlayıcılarının özel özelliklerinin neler olduğunu hatırlamıyor. Birkaç örnek kullanarak, basit DLL oluşturma işleminin tamamını 10 dakikada göstermeye çalışacağım ve ayrıca bağlayıcı uygulamamızın bazı teknik ayrıntılarını ele alacağım. Visual Studio'da DLL oluşturma işlemini adım adım farklı değişken türlerini (sayılar, diziler, dizeler vb.) değiştirme örnekleriyle göstereceğim. Ayrıca, istemci terminalinizi özel DLL'lerdeki çökmelerden nasıl koruyacağınızı açıklayacağım.
'Dosya -> Yeni' menüsünü kullanarak Win32 Uygulama Sihirbazını çalıştırın, proje türünü 'Visual C++' olarak seçin, 'Win32 Konsol Uygulaması' şablonunu seçin ve proje adını belirtin (örneğin, 'MQL5DLLSamples'). 'Konum' projesini saklamak için önerilen varsayılan dizin yerine bir kök dizin seçin, 'Çözüm için dizin oluştur' onay kutusunu devre dışı bırakın ve 'Tamam'a tıklayın:
Yazar: MetaQuotes