[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 250

 
TarasBY:
Primeiro, você calcula o lucro atual em todas as ordens abertas, depois o compara com o nível declarado: se for maior, você elimina todas as ordens. Este procedimento (e não só) é feito por esta EA (o código também está lá).

Obrigado pela dica
 

Eu não entendo.

gyfto:
//C++
MT4_EXPFUNC int __stdcall GetStrAddress(const char *str) {    
    MqlStr* s = (MqlStr*)str;
    return (int)s->string; 
}

Zhunko:
Ainda é assim:

MT4_EXPFUNC int stdcall GetStrAddress(LPCSTR szStr)
 {    
  return(int(szStr));
 }

Fiz três vezes com este código:

#property indicator_chart_window
#import "stdlib.ex4"
string IntegerToHexString(int integer_number);
#import "StrAddress.dll"
int OldGetStrAddress(string str);
int GetStrAddress(string szStr);
#import

int addrOld;
int addrNew;

int init()
  {
   string s=""; strAddress (s);
   s=s+"something"; strAddress (s);
   s="MyStr"; strAddress (s);
   s="mystr"; strAddress (s);
   return(0);
  }

int start()
  {
   return(0);
  }
void strAddress (string myStr)
  {
   addrOld=OldGetStrAddress(myStr);
   addrNew=GetStrAddress(myStr);
   Print(" строка ", CharToStr(34), myStr, CharToStr(34), ", старый вариант: ", IntegerToHexString(addrOld), ", новый вариант: ", IntegerToHexString(addrNew));
  }

Está refletido no tronco:

строка "", старый вариант: 656D6F73, новый вариант: 01CD8A90
строка "something", старый вариант: 6E696874, новый вариант: 01CD9010
строка "MyStr", старый вариант: 00360072, новый вариант: 01CD8AA0
строка "mystr", старый вариант: 00360072, новый вариант: 01CD8AA8

строка "", старый вариант: 656D6F73, новый вариант: 01C97858
строка "something", старый вариант: 6E696874, новый вариант: 01CDCC30
строка "MyStr", старый вариант: 00360072, новый вариант: 01C978868
строка "mystr", старый вариант: 00360072, новый вариант: 01C997870

строка "", старый вариант: 656D6F73, новый вариант: 01D93108
строка "something", старый вариант: 6E696874, новый вариант: 01CC5A58
строка "MyStr", старый вариант: 00360072, новый вариант: 01D93118
строка "mystr", старый вариант: 00360072, новый вариант: 01D93120

No primeiro caso temos um ponteiro para o primeiro elemento do campo MqlStr.string structure, no segundo caso temos um ponteiro para o primeiro elemento da string (LPCSTR ainda a mesmaconst char*). Vemos endereços diferentes. Por que? Acontece que a string como um char de matriz e a string como uma estrutura interna de sua representação na MQL4 tem endereços diferentes? Ou significa que a "estrutura de cordas" descrita em ExpertSample como formato interno é artificial, e seu formato interno em MQL4 é lpsz? Ou talvez eu tenha errado o primeiro código?

 
Olá a todos. Podem me aconselhar, após compilações no ícone da EA aparece um cadeado e só posso vê-lo na janela de download através do programa e na pasta que é invisível, como consertá-lo? Você pode consertá-lo?
 
Em alguns exemplos, eu vejo retorno(-1), retorno(0) ou apenas retorno. Eu uso o return(0) para interromper o programa a partir deste local. Você pode me dizer o que retorno(-1) e retorno fazem?
 
gyfto:
Ou significa que a "estrutura de cordas", descrita em ExpertSample como formato interno, é artificial e, de fato, seu formato interno em MQL4 é lpsz?

Isto significa que na DLL a cadeia é transferida exatamente como char* e não como MqlStr. Mas isto não significa que no programa ex4 a cadeia não é armazenada como MqlString. Em geral, a transferência de parâmetros do ex4 para dll é (de acordo com os desenvolvedores) um processo bastante complexo, acompanhado de todos os tipos de verificações e transformações de parâmetros.
 
laveosa:
Olá a todos. Podem me aconselhar, após compilações no ícone da EA aparece um cadeado e só posso vê-lo na janela de download através do programa e na pasta que é invisível, como consertá-lo? Obrigado.
Win 7 e o terminal está no acionamento do sistema? Você quer se livrar de problemas atuais e futuros - mova o terminal para outro drive e "tudo vai dar certo".
 
paladin80:
Em alguns exemplos, eu vejo retorno(-1), retorno(0) ou apenas retorno. Eu uso o return(0) para interromper o programa a partir deste local. Você pode me dizer o que retorno(-1) e retorno fazem?
É o valor de retorno retornado pela função. Volte para a Matemática.
 
paladin80:
Em alguns exemplos, eu vejo retorno(-1), retorno(0) ou apenas retorno. Eu uso return(0) para abortar o programa a partir deste lugar. Por favor, diga-me, o que retornar(-1) e retornar fazem?

return(-1) retorna menos um como resultado da função, o que (-1) só pode significar algo se o próprio desenvolvedor desse programa o colocar lá. Caso contrário, isso não significa nada.

return simplesmente termina a função (usada quando o tipo de retorno é nulo).

 
TarasBY:
Este é o valor retornado pela função. Volte para a matemática.

Em geral, o return(0) pára a função int start() e espera pelo próximo tick. Se não há um dígito ou é -1, o que acontece em int start()?

 
TarasBY:
Win 7 e o terminal está no acionamento do sistema? Quer se livrar de problemas atuais e futuros - mover o terminal para outra unidade e "tudo vai dar certo".

Muito obrigado :) Vou tentar.