Kütüphaneler: DLL olmadan Dosya Eşleme - sayfa 7

 
o_O:

lib bölümlere bağlanmaz, çünkü teorik olarak kod farklı süreçlerde çalıştırılabilir.

Bunu kontrol etmek için, örneğin varyantınızı veya https://www.mql5.com/tr/code/1835 adresini kullanın.

Bir muteks adlandırılırsa, tutamacını yalnızca metatrader'dan değil, herhangi bir işlemden alabileceğimi doğru anladım mı?
 
Al_key:
Muteks adlandırılırsa, yalnızca metatrader'dan değil, herhangi bir işlemden tutamacını alabileceğimi doğru anladım mı?
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms686931%28v=vs.85%29.aspx cevabı kendim buldum. Gerçekten de süreçler arasında paylaşılabilirler.
 

Yazar için soru.

Sınıfı mt4'te kullanıyorum. Terminali kapatıp açarsam, her şey çalışmayı durdurur. Çıkış yolu, kapatmadan önce Uzman Danışmanları silmek ve terminali açtıktan sonra bunları eklemek için pek uygun değil. Bu sorunu aşmanın herhangi bir yolu var mı?

Ve ikincisi. Delphi'de yazılmış bir program tarafından oluşturulan dosya eşlemesini okuyamıyorum. Nüanslar ne olabilir.

Kısaca bunlar birçok terminalde çalışan işlem panelleri.

 
Dmitry Luck'janenko:


Terminali kapatıp açarsanız, her şey çalışmayı durdurur. Çıkış yolu, kapatmadan önce EA'ları silmek ve terminali açtıktan sonra bunları eklemek için pek uygun değildir. Bu sorunu aşmanın herhangi bir yolu var mı?

Bu tür bir başlangıçtan kaldırma sırasında dosyalara ne olduğunu günlüğe kaydetmek ve görmek gerekir. herhangi bir kilit yok.

Dosya eşlemesini okuyamıyorum

"read" ile winapi'nin hangi işlevi kastediliyor?

 
o_O:

Böyle bir deinitializasyon sırasında dosyalara ne olduğunu günlüğe kaydetmek ve görmek gerekir. kilit yoktur.

"read" ile winapi'nin hangi işlevi kastediliyor?

Mesele şu ki

HANDLE64 CMemMapFile::Open(LPTSTR path, DWORD size, int mode=modeOpen)

her zaman 0 döndürür.


Bu yüzden dosyanın açık olup olmadığını gerçekten anlayamıyorum.

Yukarıdaki resimde, henüz oluşturulmamış bir dosya eşlemesini açan Uzman Danışmanın günlüğü bulunmaktadır. Ve hiçbir hata yok.

Belki de işlev

CMemMapFile::Open

int OnInit() içine değil, daha ileride bir yere, örneğin OnTick() içine eklenmelidir, ancak döndürülen tanıtıcı her zaman 0 olduğundan, dosyanın her tikte sürekli olarak açılmasını önlemek için bir kontrol yapma imkanı yoktur.

Ve ikinci soruda.

Delphi'de bir dosya eşlemesi oluşturan bir uygulama oluşturuyorum. Bağlanırken hatalar meydana geliyor. Yani doğru şekilde geçirilmemiş sayılar. Hizalamaya {$Align Off} ile başladım

'msvcrt.dll' içinde 0x04E91000'e erişim ihlali okuma gibi başka hatalar da aldım.

Şimdi veriler normal olarak 19 bayt hizalanıyor - "00:35:50.260 Panel v 1.00 GBPUSD.m,M5: OnInitsizeof(PipeData)= 19".


ancak okurken tüm veriler sıfırdır.

 
Dmitry Luck'janenko:

Mesele şu ki

her zaman 0 döndürür.

Bu yüzden dosyanın açık olup olmadığını gerçekten anlayamıyorum.

Doğru, CMemMapFile::Open bir hata kodu veya hata olmadığında 0 döndürür.

(CMemMapApi:'nin aksine, bir açık tanıtıcı döndürür ve hatayı geçirilen parametreye yazar).

Ve tanıtıcı m_hmem'dedir.



Delphi'de, bir dosya eşlemesi oluşturan bir uygulama oluşturursunuz. Bağlanırken hatalar oluşur. Yani doğru geçilmemiş sayılar.

Dosyanın başındaki ayrılmış DWORD baytlarını dikkate alıyor musunuz?
 
o_O:


dosyanın başındaki ayrılmış DWORD baytlarını hesaba katıyor musunuz?
4 bayt mı? Deneyeceğim, ben yapmadım.
 
Dmitry Luck'janenko:
4 bayt mı? Deneyeceğim, saymadım.

dosyanın kaynakta nasıl yazıldığına veya oluşturulduğuna bakın.

m_size parametresinde

 
o_O:

doğru ise, CMemMapFile::Open bir hata kodu veya hata olmadığında 0 döndürür.

(CMemMapApi:'nin aksine, bir açık tanıtıcı döndürür ve hatayı geçirilen parametreye yazar).

Ve tanıtıcı m_hmem'dedir.


Dosyanın başındaki ayrılmış DWORD baytlarını dikkate alıyor musunuz?
2016.03.04 19:00:00.897 BuyNow Client v 1.03 USDCHF.m,M5: BuyNow Client v 1.03.mq4, handle=8589934592


var olmayan bir dosya eşlemesini açarken m_hmem. Bunun bir hata mı yoksa bir tanıtıcı mı olduğunu nasıl belirleyebilirim?

 
Dmitry Luck'janenko:

var olmayan bir dosya eşlemesini açarken m_hmem. Bunun bir hata mı yoksa bir tutamaç mı olduğunu nasıl belirleyebilirim?

CMemMapFile::Open'ın bir hata kodu veya hata olmadığında 0 döndürdüğünü yazdım.