Errores, fallos, preguntas - página 2580

 
Koldun Zloy:

1. En MQL se copia una cadena, no un puntero.

_DLLAPI void fnReplaceString(wchar_t * text, wchar_t *from, wchar_t * to)
{
   wchar_t * cp;
   
   //проверка параметров
   if(text==NULL || from==NULL || to==NULL) return;
   if(wcslen(from)!=wcslen(to))             return;
 
   //поищем подстроку
   if((cp=wcsstr(text,from))==NULL)         return;

   //заменим
   memcpy(cp,to,wcslen(to)*sizeof(wchar_t));
}
#import "MQL5DLLSamples.dll"
void fnReplaceString(string & text, string from, string to);
#import


Sección 3.3

 
Koldun Zloy:

2. Has resaltado una línea de 200 caracteres en MQL. Entonces copió 164 caracteres en él. Después, mira el tamaño de la cadena en MQL. Sigue siendo 200.

La longitud, no el tamaño. Longitud en caracteres, tamaño en bytes.
Comprobado, después de obtener una cadena de 164 caracteres, sí la longitud sigue siendo 200.
¿Alguna opinión al respecto?

 
Roman:

Así que para hacerlo bien, renuncié a memcpy, y usé wcscpy o wcsncpy.
Resultado, post anterior.

Me refería a sizeof( wchar_t* ).

 
Roman:


Sección 3.3

Sería mejor que no discutieras conmigo, sino que leyeras este artículo con más atención. Y averiguar lo que está pasando allí.

Entonces no tendrás ningún problema.

Lo que quieres hacer no es realmente tan complicado.

 
Roman:

La longitud, no el tamaño. Longitud en caracteres, tamaño en bytes.
Comprobado, después de obtener una cadena de 164 caracteres, sí la longitud sigue siendo 200.
¿Alguna opinión al respecto?

El porqué de esto ya se ha explicado anteriormente.

 
Koldun Zloy:

Lo que quieres hacer no es realmente tan difícil.

Así que dime si no es tan difícil.
¿O crees que es un comportamiento normal?

 
Roman:

Así que dime si no es tan difícil.
¿O crees que es un comportamiento normal?

¿Así que ni siquiera planean entender nada, simplemente te dan una receta ya hecha y ya está?

No entiendo por qué quieres hacer programación si es una carga para ti, pero eso es cosa tuya.


¿Crees que alguien querrá ayudarte si haces una pregunta y no quieres mostrar un código detallado reproducible?

o no lo leen, o discuten con los que saben mucho más?


Por lo tanto, no habrá una receta lista. Voy a escribir un principio general para obtener una cadena de una DLL. Puedes escribir el código tú mismo, si te consideras un programador.


1. En MQL se crea el array ushort.

Inícialo.

3. Pasa el array y su tamaño a la DLL.

4. En la DLL, copie una cadena a esta matriz utilizando la función wmemcpy_s().

5. Devuelve la longitud de la cadena copiada de la DLL.

6. En MQL, crea una cadena a partir del array utilizando la función ShortArrayToString().

 
Los comentarios no relacionados con este tema han sido trasladados a "Preguntas de los principiantes de MQL4 MT4 MetaTrader 4".
 

En uno de los servidores (no MQ) MT5 se vuelve loco - carga la CPU al 100% y registra intensamente estos mensajes para diferentes instrumentos:

Actualización espontánea constante de HistoryBase

Los gráficos parpadean. Es imposible trabajar.

¿Hay alguna posibilidad de arreglarlo localmente o la única salida es esperar a que el servidor termine algunas partidas?

 
Koldun Zloy:

¿Así que ni siquiera planean entender nada, simplemente te dan una receta ya hecha y ya está?

No entiendo por qué quieres hacer programación si es una carga para ti, pero eso es cosa tuya.

¿Crees que alguien querrá ayudarte si haces una pregunta y no quieres mostrar un código detallado reproducible?

o no leen o discuten con los que saben mucho más?

Por lo tanto, no habrá una receta lista. Voy a escribir un principio general para obtener una cadena de una DLL. Puedes escribir el código tú mismo, si te consideras un programador.


1. En MQL se crea el array ushort.

Inícialo.

3. Pasa el array y su tamaño a la DLL.

4. En la DLL, copie una cadena a esta matriz utilizando la función wmemcpy_s().

5. Devuelve la longitud de la cadena copiada de la DLL.

6. En MQL, crea una cadena a partir del array utilizando ShortArrayToString().

¿Dónde ves un argumento aquí? Esta es una discusión de trabajo, no es necesario retorcer el significado en un gallinero, con un patetismo arrogante.
No has pedido nada ya hecho. Creía que tú y el puntero teníais una solución, pero no es así.
El que no ha leído el tema eres tú, aquí ya se está hablando de arrays desde hace mucho tiempo y todo el mundo lo conoce muy bien.
Y hace tiempo que me inclino por las matrices. Pero ya que mql tiene cadena, ¿por qué no usarla directamente?
Es exactamente el error en la cadena de mql copiando un puntero en ella lo que estamos discutiendo aquí.
Te diré más, no sólo a través de ushort se puede solucionar todo. Hay muchas opciones con las matrices.
Pero en mi caso no quiero usar arrays, ya que la estructura del código no siempre tiene sentido.
Más aún cuando tengo la cadena de mql con la que puedo trabajar directamente, pero debe funcionar correctamente.

Razón de la queja: