o_O: Escribí que CMemMapFile::Open devuelve un código de error o 0 cuando no hay error.
Al principio de la conversación publiqué una captura de pantalla de lo que devuelve la función CMemMapFile::Open.
Era 0 como si no hubiera error.
Luego lo corregí para ver si el handle es NULL.
Print(__FILE__,", handle=",MapFile.m_hmem);
y como resultado obtuve
2016.03.04 19:00:00.897 BuyNow Client v 1.03 USDCHF.m,M5: BuyNow Client v 1.03.mq4, handle=8589934592
No hay error, hay un handle, qué más necesita, dirá usted... pero nadie creó la visualización del archivo... Y es imposible abrir una cartografía que no ha sido creada.
O tal vez este mapeo fue creado por otra persona y yo no lo sé????
Algún programa crea una visualización con este nombre exacto :-)
Excelente librería, la usé junto con mutexes para escribir un copiador local
Como componente importante para el receptor obtuve el tamaño del archivo y construí un bucle a partir de él,
Encontré algunos bugs - ArrayOutOfRange o falta de 4 bytes.
Arreglado
//------------------------------------------------------------------ Writeint CMemMapApi::Write(HANDLE64 hmem, constuchar &buf[], DWORD pos, int sz, DWORD &err) // escribir el número especificado de bytes en la memoria
{
if (hmem==NULL) return(-1);
PBYTE64 view=ViewFile(hmem, err); if (view==0 || err!=0) return(-1); // si no está abierto
DWORD size=GetSize(hmem, err); if (pos+sz>size) { UnViewFile(view); return(-2); }; // si el tamaño es menor, saliruchar src[];
ArrayResize(src, size+HEAD_MEM);
memcpyX(src, view, size+HEAD_MEM); // tomó el bytebufferfor(int i=0; i<sz; i++)
{
src[pos+i+HEAD_MEM]=buf[i]; // escrito en memoria
}
memcpyX(view, src, size+HEAD_MEM); // copiado de nuevo
UnViewFile(view); // cerrar la vistareturn(0); // devuelto OK.
}
//------------------------------------------------------------------ Readint CMemMapApi::Read(HANDLE64 hmem, uchar &buf[], DWORD pos, int sz, DWORD &err) // leer de la memoria el número especificado de bytes
{
if (hmem==NULL) return(-1);
PBYTE64 view=ViewFile(hmem, err); if (view==0 || err!=0) return(-1); // si no está abierto
DWORD size=GetSize(hmem, err); // tengo el tamañouchar src[];
ArrayResize(src, size+HEAD_MEM);
memcpyX(src, view, size+HEAD_MEM); // tomó el bytebufferArrayResize(buf, sz);
int i=0;
for(i=0; i<sz && pos+i<size; i++)
{
buf[i]=src[pos+i+HEAD_MEM]; // leer bytes//i++;
}
UnViewFile(view); // cerrar la vista return(i); // número de bytes copiados
}
Pero si he creado MMF con otro programa, cuando intento escribir o leer desde él, se produce un error crítico.
¿Cuál es el problema?
- compruebe si no hay errores al abrir el archivo - compruebe el volumen asignado disponible para lectura/escritura en todas las funciones de trabajo con arrays/cadenas (tenga en cuenta 2 bytes) etc.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Escribí que CMemMapFile::Open devuelve un código de error o 0 cuando no hay error.
Al principio de la conversación publiqué una captura de pantalla de lo que devuelve la función CMemMapFile::Open.
Era 0 como si no hubiera error.
Luego lo corregí para ver si el handle es NULL.
y como resultado obtuve
2016.03.04 19:00:00.897 BuyNow Client v 1.03 USDCHF.m,M5: BuyNow Client v 1.03.mq4, handle=8589934592
No hay error, hay un handle, qué más necesita, dirá usted... pero nadie creó la visualización del archivo... Y es imposible abrir una cartografía que no ha sido creada.
O tal vez este mapeo fue creado por otra persona y yo no lo sé????
Algún programa crea una visualización con este nombre exacto :-)
Dmitry Luck'janenko:
O tal vez este mapeo fue creado por otra persona y yo no lo sé ???.
Algún programa crea un mapeo con ese nombre exacto :-)
Bueno, has creado algo tu mismo antes de eso )
el software simplemente trabaja con la memoria así. No borra nada de una vez. Es por eso que los datos antiguos pueden colgar alrededor y ser abierto.
Pero cuando se sobrescribe, no se abrirá. Usted probablemente no hizo nada entre las aperturas.
Excelente librería, la usé junto con mutexes para escribir un copiador local
Como componente importante para el receptor obtuve el tamaño del archivo y construí un bucle a partir de él,
Encontré algunos bugs - ArrayOutOfRange o falta de 4 bytes.
Arreglado
Si creo MMF a través de MQL5 y escribo en él y luego lo leo.
Pero si creo el MMF con otro programa, cuando intento escribir o leer en él, se produce un error crítico.
¿Cuál es el problema?
Si creo MMF a través de MQL5 y escribo en él y luego lo leo.
Pero si creo el MMF con otro programa, cuando intento escribir o leer en él, se produce un error crítico.
¿Cuál es el problema?
El club de telépatas se esfuerza por adivinar el número del error crítico.
El club de los telépatas trata tensamente de adivinar el número del error crítico.
MT5 mensaje de error crítico sin código de error. Si hubiera un código, se indicaría.
Pero si he creado MMF con otro programa, cuando intento escribir o leer desde él, se produce un error crítico.
¿Cuál es el problema?
- compruebe si no hay errores al abrir el archivo
- compruebe el volumen asignado disponible para lectura/escritura en todas las funciones de trabajo con arrays/cadenas (tenga en cuenta 2 bytes)
etc.
Problema solucionado.
Es necesario escribir y leer archivos MMF por una aplicación de terceros a partir de 4 bytes, no desde 0.
Y para MT5 no se cuentan 4 bytes, aunque el offset sea 0.
Por eso cuando un programa de terceros escribía desde 0 byte, se producía un error al intentar leer MT5.
Problema solucionado.
Es necesario escribir y leer archivos MMF por una aplicación de terceros a partir de 4 bytes, no desde 0.
Y para MT5 no se cuentan 4 bytes, aunque el offset sea 0.
Por eso cuando tenía un programa de terceros escribiendo desde 0 byte, al intentar leer MT5, se producía un error.