MQL5'te her zaman kahramanlığa yer vardır! ;) - sayfa 5

 
sergeev :

olası olmayan. OBJ_TEXT aracılığıyla bir megabaytlık bilgiyi aktaramazsınız.

en yakın aday - kaynaklar

Noktanın aslında farklı türlerdeki değişkenlerle doldurulmuş bir yapı olduğunu unutmayın. Terminal kapatılırken/açılırken kaydedilir ve ayrıca şablona kaydedilir.

 
DC2008 :

Noktanın aslında farklı türlerdeki değişkenlerle doldurulmuş bir yapı olduğunu unutmayın. Terminal kapatılırken/açılırken kaydedilir ve ayrıca şablona kaydedilir.

?
 
sergeev :

Her şeyi sormak istiyorum ama DLL 32/64 için zaten bir çözüm buldunuz mu?

Windows'ta (\System32\) bir tür WOW32reg.exe var -h -? tepki vermiyor, körü körüne kayıt olun ki hiçbir şey yapamam.

Google da sessiz, microsoft.com'da hiçbir şey bulunamadı ... genel olarak, bu gerçek bir sorun.

 
sergeev :
?

Neyi anlamadın? Belirli bir görev verelim, aksi takdirde etraftaki her şey ...

 
MetaDriver :

Her şeyi sormak istiyorum ama DLL 32/64 için zaten bir çözüm buldunuz mu?

Windows'ta (\System32\) bir tür WOW32reg.exe var -h -? tepki vermiyor, körü körüne kayıt olun ki hiçbir şey yapamam.

Google da sessiz, microsoft.com'da hiçbir şey bulunamadı ... genel olarak, bu gerçek bir sorun.

Yani, sadece bir fikir, kendim denemedim. Terminalin bitliğini belirledikten sonra, DLL'nin LoadLibrary aracılığıyla dinamik yüklemesini kullanın.

 
MetaDriver :

Her şeyi sormak istiyorum ama DLL 32/64 için zaten bir çözüm buldunuz mu?

Burada sorun ne?

İçe aktarmada, yalnızca farklı parametrelerle (int/long) iki özdeş işlev belirtirsiniz. Programda 32/64 bit derinliğine bağlı olarak uygun fonksiyonu çağırırsınız.

 
MetaDriver :

Her şeyi sormak istiyorum ama DLL 32/64 için zaten bir çözüm buldunuz mu?

pencerelerdenişlevleri çağırmak için (onlara işaretçiler ilettiğimizde) - bulundu.

bağlam sayesinde :: her şey düzgünce çözüldü.


Yurich :

İçe aktarmada, yalnızca farklı parametrelerle (int/long) iki özdeş işlev belirtirsiniz. Programda 32/64 bit derinliğine bağlı olarak uygun fonksiyonu çağırırsınız.


örneğin şöyle:

 #import "MemMap32.dll"
int MemRead(HANDLE32 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz
#import "MemMap64.dll"
int MemRead(HANDLE64 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz
#import

// переопределяем вызовы для контроля битности
int MemRead(HANDLE64 h, int &v[], int pos, int sz, int &error) { if ( _IsX64 ) return (MemMap64::MemRead(h, v, pos, sz, error)); return (MemMap32::MemRead((HANDLE32)h, v, pos, sz, error));  }
açık bir :: bağlamıyla aradığınız bir kodda.

::MemRead(...)


Yani, fonksiyon isimleri üretmiyoruz, ancak bitliğin otomatik tespitini yapıyoruz ve doğru içe aktarılanı çağırıyoruz.

 
MetaDriver :

Her şeyi sormak istiyorum ama DLL 32/64 için zaten bir çözüm buldunuz mu?

En kolay yol, aynı ada sahip x32 ve x64 DLL'lerini farklı Windows sistem dizinlerine (sırasıyla SysWOW64 ve System32) atmaktır.

Ancak programlar arası veri alışverişi IMHO gerçekten bir problemdir, özellikle de buna gelişigüzel yaklaşırsanız.
Microsoft muhtemelen geçen yüzyılın doksanlarında dosyadan, akış alışverişinden nesneye - OLE'den ActiveX -> COM -> COM + -> .NET'e geçtiklerinde de bu şekilde akıl yürütmüştür. Programlar arası değişim teknolojisine dayanarak, yeni bir programlama ve kod yürütme sistemi oluşturuldu.

 
Yurich :

Ve burada sorun nedir?

İçe aktarmada, yalnızca farklı parametrelerle (int/long) iki özdeş işlev belirtirsiniz. Programda 32/64 bit derinliğine bağlı olarak uygun fonksiyonu çağırırsınız.

32-bit olanı hiç yüklemek istemiyor ve artık onu (dll) çağırmayacak olsam bile programı çalıştırmak istemiyor.

" DLL kullanımına izin ver " onay kutusu işaretli olmadığında, [Tamam] düğmesi hiç görüntülenmez, yalnızca iptal edilir. İzin verin, Tamam'a basın - program çöker. Çıkmaz sokak.

2013.12.19 17:43:20.657 TestFFTdll      'E:\Programs\MetaQuotes_MT5\MQL5\Libraries\fft32.dll' is not 64-bit version


Genel olarak, ideal olarak x64 terminalinde dll32'yi çağırabilmek istiyorum. Teorik olarak neyin mümkün olduğunu tam olarak biliyorum. Nasıl olduğunu bilmiyorum.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе - Документация по MQL5
 
MetaDriver :

32-bit olanı hiç yüklemek istemiyor ve artık onu (dll) çağırmayacak olsam bile programı çalıştırmak istemiyor.

" DLL kullanımına izin ver " onay kutusu işaretli olmadığında, [Tamam] düğmesi hiç görüntülenmez, yalnızca iptal edilir. İzin verin, Tamam'a basın - program çöker. Çıkmaz sokak.


Genel olarak, ideal olarak x64 terminalinde dll32'yi çağırabilmek istiyorum. Teorik olarak neyin mümkün olduğunu tam olarak biliyorum. Nasıl olduğunu bilmiyorum.

Yeni kontrol edildi:
2013.12.19 18:49:01.437    do (EURUSD,H1)    TEST
2013.12.19 18:49:01.436    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:48:58.929    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version
Kütüphane yüklenmedi, ancak işlevi çağrılıncaya kadar her şey çalışıyor (TEST çıktısı);

Şimdi böyle bir kütüphanenin fonksiyonunu çağırıyoruz:
2013.12.19 18:51:07.446    do (EURUSD,H1)    unresolved import function call
2013.12.19 18:51:07.446    do (EURUSD,H1)    Cannot call 'fnCrashTest', 'test.dll' is not loaded
2013.12.19 18:51:07.445    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:51:05.107    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version