A nova sintaxe MQL4 - página 5

 
gchrmt4:
Ainda não tenho certeza se entendi, mas... Não creio que você possa declarar a importação da MQL4 como nula*. Você tem que usar um tipo de dado específico na importação, e então você só pode usar a importação DLL com esse tipo de dado. Se você quiser usar a mesma função DLL com diferentes tipos de dados, então você tem um problema, a menos que haja uma solução como https://www.mql5.com/en/forum/148934.


Na verdade, estou usando um método de trabalho, mas é bastante fraco - envolvendo qualquer tipo em uma estrutura genérica. Aceitar uma estrutura genérica como parâmetro pode mudar em qualquer lançamento futuro, mas isso não funciona com matrizes.

 
Ovo:


Na verdade, estou usando um método de trabalho, mas é bastante fraco - envolvendo qualquer tipo em uma estrutura genérica. Aceitar uma estrutura genérica como parâmetro pode mudar em qualquer lançamento futuro, mas isso não funciona com matrizes.

... Parece que estou errado. O que ambos estamos esquecendo é que a MQL4 agora tem uma sobrecarga de funções, e portanto é possível fazer algo assim:

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

... Parece que estou errado. O que ambos estamos esquecendo é que a MQL4 agora tem uma sobrecarga de funções e, portanto, é possível fazer algo assim:


Claro, é disso que eu falo desde o início :)

Até agora minha importação parece ser assim:

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

e me pergunto quanto tempo esta lista (para uma única importação) se torna em um ano...

 

Também notei pequena inconsistência na compilação de código com dependência de arquivos incluídos.

Se dois ou mais projetos compartilham o mesmo include, e o arquivo include é modificado, então os primeiros projetos o detectam e recompilam, enquanto os próximos projetos não o fazem. Mas não é um problema sério (podemos excluir todos os ex4 a qualquer momento).

 

Preciso apenas de uma resposta rápida, hoje estou cansado demais para procurá-la. É possível destruir o escopo2 antes que ele atinja o limite do bloco? Acho que não, mas é melhor perguntar.

{
   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: Preciso apenas de uma resposta rápida, hoje estou cansado demais para procurá-la. É possível destruir o escopo2 antes que ele atinja o limite do bloco? Acho que não, mas é melhor perguntar.
Não.
 
ubzen:
Não.


Obrigado.
 

Por que o "ArrayMaximum" é diferente entre MT4 600+ e MT5? Pensei que a razão para migrar a sintaxe do MT4 para o MT5 era facilitar o desenvolvimento de aplicações que funcionassem em ambos?!?!


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:

Por que o "ArrayMaximum" é diferente entre MT4 600+ e MT5? Pensei que a razão para migrar a sintaxe do MT4 para o MT5 era facilitar o desenvolvimento de aplicações que funcionassem em ambos?!?!

Provavelmente para tentar manter alguma compatibilidade com o passado ...
 
dlewisfl: Por que o "ArrayMaximum" é diferente entre MT4 600+ e MT5? Pensei que a razão para migrar a sintaxe do MT4 para o MT5 era facilitar o desenvolvimento de aplicações que funcionassem em ambos?!?!
Não é bom. Então, faça o seu:
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
}
Problema resolvido.