[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 250

 
TarasBY:
En primer lugar, se calcula el beneficio actual de todas las órdenes abiertas y, a continuación, se compara con el nivel declarado: si es superior, se eliminan todas las órdenes. Este procedimiento (y no sólo) lo hace este EA (el código también está ahí).

Gracias por el consejo
 

No lo entiendo.

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

Zhunko:
Sigue siendo así:

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

Lo ejecuté tres veces con 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));
  }

Se refleja en el registro:

строка "", старый вариант: 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

En el primer caso tenemos un puntero al primer elemento del campo de la estructura MqlStr.string, en el segundo caso tenemos un puntero al primer elemento de la cadena (LPCSTR sigue siendo el mismoconst char*). Vemos diferentes direcciones. ¿Por qué? Resulta que la cadena como un array char y la cadena como una estructura interna de su representación en MQL4 tienen diferentes direcciones? ¿O significa que la "estructura de cadena" descrita en ExpertSample como formato interno es artificial, y su formato interno en MQL4 es lpsz? ¿O tal vez me he equivocado en el primer código?

 
Hola a todos. Podéis aconsejarme, después de las compilaciones en el icono del EA aparece un candado y sólo puedo verlo en la ventana de descarga a través del programa y en la carpeta es invisible, ¿cómo solucionarlo? ¿Puedes arreglarlo?
 
En algunos ejemplos, veo return(-1), return(0) o simplemente return. Utilizo return(0) para interrumpir el programa desde esta ubicación. ¿Puedes decirme qué hacen return(-1) y return?
 
gyfto:
¿O significa que la "estructura de cadena", descrita en ExpertSample como formato interno, es artificial, y de hecho su formato interno en MQL4 es lpsz?

Esto significa que en la DLL la cadena se transfiere exactamente como char* y no como MqlStr. Pero no significa que en el programa ex4 la cadena no se almacene como MqlString. En general, la transferencia de parámetros de ex4 a dll es (según los desarrolladores) un proceso bastante complejo, acompañado de todo tipo de comprobaciones y transformaciones de los parámetros.
 
laveosa:
Hola a todos. Podéis aconsejarme, después de las compilaciones en el icono del EA aparece un candado y sólo puedo verlo en la ventana de descarga a través del programa y en la carpeta es invisible, ¿cómo solucionarlo? Gracias.
¿Win 7 y el terminal está en la unidad del sistema? Quieres librarte de los problemas actuales y futuros: mueve el terminal a otra unidad y "todo se arreglará".
 
paladin80:
En algunos ejemplos, veo return(-1), return(0) o simplemente return. Utilizo return(0) para interrumpir el programa desde esta ubicación. ¿Puedes decirme qué hacen return(-1) y return?
Es el valor devuelto por la función. Vuelve a las matemáticas.
 
paladin80:
En algunos ejemplos, veo return(-1), return(0) o simplemente return. Uso return(0) para abortar el programa desde este lugar. Por favor, dime, ¿qué hacen return(-1) y return?

return(-1) devuelve menos uno como resultado de la función, que (-1) sólo puede significar algo si el desarrollador de ese programa lo puso ahí. De lo contrario, no significa nada.

return simplemente termina la función (se utiliza cuando el tipo de retorno es void).

 
TarasBY:
Este es el valor devuelto por la función. Vuelve a las matemáticas.

En general, return(0) detiene la función int start() y espera el siguiente tick. Si no hay ningún dígito o es -1, ¿qué ocurre en int start()?

 
TarasBY:
¿Win 7 y el terminal está en la unidad del sistema? Quieres librarte de los problemas actuales y futuros: mueve el terminal a otra unidad y "todo se arreglará".

Muchas gracias :) Lo intentaré.