Era necesario transferir enormes cantidades (gigabytes) de datos. La implementación a través de esta librería, desafortunadamente, mostró un rendimiento súper bajo.
Es increíble como este truco le ha funcionado a alguien. Con semejantes fallos dentro... Abajo hay un fragmento de CMemMapApi::Write() ArrayResize(src, size); memcpyX(src, view, size); // tomó el bytebuffer for(int i=0; i
Desafortunadamente, FileMapping tiene una desventaja significativa. Si la aplicación hija (que lee los datos) no ha terminado su trabajo correctamente por alguna razón ( llamadas akernel32::UnmapViewOfFile y kernel32::CloseHandle) , el "archivo" permanece colgado en memoria hasta que se cierran todos los procesos desde donde se abrió ( llamadas a kernel32::OpenFileMappingW y kernel32::MapViewOfFile). En particular, no se puede cambiar su tamaño - reabrirlo (cerrar y volver a abrir).
No he encontrado una solución al problema. Es difícil encontrarse con una situación así con esta librería, porque cada acción en ella comienza con la apertura y termina con el cierre. Por eso es tan lenta. Pero aún así puedes encontrarte con este error. Y entonces el programa MQL se bloqueará con este mensaje.
поэтому он должен оценить x и ввести значение в ST2 для структуризации. с технической точки зрения При использовании одноуровневой индирекции ST2 x строчит имя введенного макроса но при использовании двойного слоя он строчит значение введенного макроса
Estoy tratando de comprobar el trabajo de este ejemplo https://www.mql5.com/es/code/818
Estoy usando MT5 Versión: 5.00 build 5370 17 Oct 2025.
Por alguna razón obtengo errores al intentar compilar el archivo memmap.mq5:
memmap.mq5
MemMapLib.mqh
wrong parameters count, 4 passed, but 3 requires MemMapLib.mqh 2799
long CMemMapFile::Open(string,int,int) MemMapLib.mqh 25119
call resolves to 'long CMemMapFile::Open(string,int,int)' instead of 'long CMemMapApi::Open(string,int,int,int&)' due to new rules of method hiding MemMapLib.mqh 2799
see declaration of function 'CMemMapFile::Open' MemMapLib.mqh 25119
see declaration of function 'CMemMapApi::Open' MemMapLib.mqh 12219
wrong parameters count, 3 passed, but 1 requires MemMapLib.mqh 2929int CMemMapFile::Fill(uchar) MemMapLib.mqh 25314
call resolves to 'int CMemMapFile::Fill(uchar)' instead of 'int CMemMapApi::Fill(long,uchar,int&)' due to new rules of method hiding MemMapLib.mqh 2929
see declaration of function 'CMemMapFile::Fill' MemMapLib.mqh 25314
see declaration of function 'CMemMapApi::Fill' MemMapLib.mqh 12414
wrong parameters count, 4 passed, but 1 requires MemMapLib.mqh 29916int CMemMapFile::Grows(int) MemMapLib.mqh 25514
call resolves to 'int CMemMapFile::Grows(int)' instead of 'long CMemMapApi::Grows(long,string,int,int&)' due to new rules of method hiding MemMapLib.mqh 29916
see declaration of function 'CMemMapFile::Grows' MemMapLib.mqh 25514
see declaration of function 'CMemMapApi::Grows' MemMapLib.mqh 125193 errors, 3 warnings 33
fxsaber #: Las fuentes de la biblioteca no cumplen los requisitos actuales del lenguaje MQL5.
¿Hay alguna forma de corregirlo? ¿O es necesario rehacer todas las fuentes y es imposible hacerlo sin el autor? Creo que el compilador generó sólo 3 errores aquí. Sería genial si se pudiera corregir.
¿Hay alguna forma de arreglarlo? ¿O es necesario rehacer todos los fuentes y es imposible hacerlo sin el autor? Creo que el compilador dio sólo 3 errores aquí. Sería genial si se pudiera corregir.
Y aquí ya he corregido el código yo mismo. Aquellos que lo necesitan pueden utilizarlo. El Asesor Experto compila correctamente con él.
He añadido esto a partir de la línea 251:
using CMemMapApi::Open;
using CMemMapApi::Close;
using CMemMapApi::Fill;
using CMemMapApi::Grows;
using CMemMapApi::Write;
using CMemMapApi::Read;
Era necesario transferir enormes cantidades (gigabytes) de datos. La implementación a través de esta librería, desafortunadamente, mostró un rendimiento súper bajo.
Tuve que rehacerlo completamente usando el conjunto DLL original. Funcionó rápidamente.
Desafortunadamente, FileMapping tiene una desventaja significativa. Si la aplicación hija (que lee los datos) no ha terminado su trabajo correctamente por alguna razón ( llamadas akernel32:: UnmapViewOfFile y kernel32::CloseHandle) , el "archivo" permanece colgado en memoria hasta que se cierran todos los procesos desde donde se abrió ( llamadas a kernel32 ::OpenFileMappingW y kernel32::MapViewOfFile). En particular, no se puede cambiar su tamaño - reabrirlo (cerrar y volver a abrir).
No he encontrado una solución al problema. Es difícil encontrarse con una situación así con esta librería, porque cada acción en ella comienza con la apertura y termina con el cierre. Por eso es tan lenta. Pero aún así puedes encontrarte con este error. Y entonces el programa MQL se bloqueará con este mensaje.
Por alguna razón obtengo errores al intentar compilar el archivo memmap.mq5:
¿Puede alguien decirme qué estoy haciendo mal? ¿Y cómo solucionarlo?
Las fuentes de la biblioteca no cumplen los requisitos actuales del lenguaje MQL5.
¿Hay alguna forma de corregirlo? ¿O es necesario rehacer todas las fuentes y es imposible hacerlo sin el autor? Creo que el compilador generó sólo 3 errores aquí. Sería genial si se pudiera corregir.
¿Hay alguna forma de arreglarlo? ¿O es necesario rehacer todos los fuentes y es imposible hacerlo sin el autor? Creo que el compilador dio sólo 3 errores aquí. Sería genial si se pudiera corregir.
Y aquí ya he corregido el código yo mismo. Aquellos que lo necesitan pueden utilizarlo. El Asesor Experto compila correctamente con él.
He añadido esto a partir de la línea 251: