Die neue MQL4-Syntax - Seite 5

 
gchrmt4:
Ich bin immer noch nicht sicher, ob ich verstehe, aber... Ich glaube nicht, dass Sie den MQL4-Import als void* deklarieren können. Sie müssen einen bestimmten Datentyp im Import verwenden, und Sie können den DLL-Import dann nur mit diesem Datentyp verwenden. Wenn Sie dieselbe DLL-Funktion mit verschiedenen Datentypen verwenden wollen, haben Sie ein Problem, es sei denn, es gibt eine Abhilfe wie https://www.mql5.com/en/forum/148934.


Ich verwende zwar einen Workaround, aber er ist ziemlich schwach - die Umwandlung eines beliebigen Typs in eine generische Struktur. Die Akzeptanz einer generischen Struktur als Parameter kann sich in zukünftigen Versionen ändern, was jedoch nicht mit Arrays funktioniert.

 
Ovo:


Derzeit verwende ich einen Workaround, aber er ist ziemlich schwach - die Umwandlung eines beliebigen Typs in eine generische Struktur. Die Akzeptanz einer generischen Struktur als Parameter kann sich in zukünftigen Versionen ändern, was jedoch nicht mit Arrays funktioniert.

... Es scheint, dass ich falsch liege. Was wir beide vergessen, ist, dass MQL4 jetzt Funktionsüberladung hat, und daher ist es möglich, so etwas zu tun:

#import "AnyDll.dll"
   void Test(TestStruct &[]);
   void Test(int &[]);
#import 
 
gchrmt4:

... Es scheint, dass ich falsch liege. Was wir beide vergessen, ist, dass MQL4 jetzt Funktionsüberladung hat, und daher ist es möglich, so etwas zu tun:


Klar, das ist es, wovon ich von Anfang an gesprochen habe :)

Bis jetzt sieht mein Import so aus:

bool ReadFile(int, MT4Structure&, uint, uint&[],int); // wrapper for all simple types / structures
bool ReadFile(int, double&[], uint, uint&[],int);
bool ReadFile(int, int&[], uint, uint&[],int);
bool ReadFile(int, uchar&[], uint, uint&[],int);
bool ReadFile(int, MT4Structure&[], uint, uint&[],int); // this does not work

und ich frage mich, wie lang diese Liste (für einen einzelnen Import) in einem Jahr wird...

 

Mir ist auch eine kleine Inkonsistenz bei der Kompilierung von Code aufgefallen, der von Include-Dateien abhängig ist.

Wenn zwei oder mehr Projekte das gleiche Include teilen und die Include-Datei geändert wird, dann erkennt das erste Projekt dies und kompiliert neu, während die nächsten Projekte dies nicht tun. Dies ist jedoch kein ernstes Problem (wir können alle ex4 jederzeit löschen).

 

Ich brauche nur eine schnelle Antwort, ich bin heute zu müde, um danach zu suchen. Ist es möglich, scope2 zu zerstören, bevor es die Blockgrenze erreicht? Ich glaube nicht, aber es ist besser zu fragen.

{
   MT4Scope* scope = new MT4Scope(_Symbol, 222);
   MT4Scope scope2(_Symbol, 223);
   delete scope; // calls destructor
   // here I want to call scope2 destructor, but I do not know how

   // some additional code
}
 
Ovo: Ich brauche nur eine schnelle Antwort, ich bin heute zu müde, um danach zu suchen. Ist es möglich, scope2 zu zerstören, bevor es die Blockgrenze erreicht? Ich glaube nicht, aber es ist besser zu fragen.
Nein.
 
ubzen:
Nein.


Ich danke Ihnen.
 

Warum ist "ArrayMaximum" unterschiedlich zwischen MT4 600+ und MT5? Ich dachte, der Grund für die Umstellung der MT4-Syntax auf die MT5-Syntax war, die Entwicklung von Anwendungen, die auf beiden Systemen funktionieren, zu erleichtern?


MT4

int  ArrayMaximum(
   const void&   array[],             // array for search
   int           count=WHOLE_ARRAY,   // number of checked elements
   int           start=0              // index to start checking with
   );


MT5

int  ArrayMaximum(
   const void&   array[],             // array for search
   int           start=0,             // index to start checking with
   int           count=WHOLE_ARRAY    // number of checked elements
   );
 
dlewisfl:

Warum ist "ArrayMaximum" unterschiedlich zwischen MT4 600+ und MT5? Ich dachte, der Grund für die Umstellung der MT4-Syntax auf die MT5-Syntax war, dass es einfach war, Anwendungen zu entwickeln, die auf beiden Systemen funktionierten?!

Wahrscheinlich um eine gewisse Rückwärtskompatibilität zu gewährleisten....
 
dlewisfl: Warum ist "ArrayMaximum" unterschiedlich zwischen MT4 600+ und MT5? Ich dachte, der Grund für die Umstellung der MT4-Syntax auf die MT5-Syntax war, dass es einfach war, Anwendungen zu entwickeln, die auf beiden Systemen funktionierten?!
Nicht gut. Also machen Sie Ihre eigene:
int iArrayMaximum(const void& array[], int iLimit=WHOLE_ARRAY, int iBeg=0){
   if(iLimit == WHOLE_ARRAY) iLimit = ArraySize(array);
#ifdef __MQL4__
   return( ArrayMaximum(array, iLimit - iBeg + 1, iBeg) );
#else
   return( ArrayMaximum(array, iBeg, iLimit - iBeg + 1) );
#endif
}
Problem gelöst.
Grund der Beschwerde: