Bibliotecas: Mapeado de Ficheros sin la DLL - página 6

 
TheXpert:
Estándar es estándar, así que no hay nada que hacer, de ninguna manera. Hay un error... comunícalo a los desarrolladores. No hay otra manera.

En la biblia estándar, la llamada es GetLastError.

pero debería ser así ::GetLastError.

De lo contrario kernel32::GetLastError es un error.

¿Cómo no corregirlo?

 
Urain:

¿Cómo es posible que no se corrija?

Insinué y mostré y escribí.

#importar

int GetLastError(int )

---

y ya está, el contexto está libre.

Si no quieres hacerlo así, RtlGetLastError es similar.

 
sergeev:

Insinué y mostré y escribí.

#importar

int GetLastError(int )

---

y ya está, el contexto es libre.

Si no quieres hacerlo así, RtlGetLastError es similar.

Sí, entiendo las indirectas de la primera vez, sólo los desarrolladores de MQ también nos hacen caso, si no, codifican para nadie y luego la gente sufre.
 
sergeev:

no quieres hacerlo de esta manera - RtlGetLastError - similar

RtlGetLastWin32Error? no similar, tienes que resetear el error tu mismo con tus manos
 
Al aplicar sus clases en mi código me encontré con el siguiente problema: si el tamaño de la memoria compartida es mayor que 4096 bytes, memcpyX en CMemMapApi::Write / Read (líneas 219 y 231 en memmaplib.mqh) muestra "Access Violation". ¿Podrías decirme "dónde escarbar" para "hacer" que memcpy lea bloques de memoria mayores de 4kb?
[Eliminado]  

El autor tiene un gran respeto por el trabajo realizado. Si al autor no le importa, incluiré estas dos clases en mi biblioteca de clases SCL.

Sin embargo, hay errores en las clases en cuanto a la definición de tipos estándar de Microsoft que causan otros errores en el algoritmo. Por ejemplo, el tipo DWORD no es int sino uint. Debido a esto, tuve que revisar algunos algoritmos en las clases, pero no fue muy difícil.

 

_Konstantin_:

Por ejemplo, el tipo DWORD no es int, sino uint.

bitness es el mismo. esto es suficiente para llamar a
[Eliminado]  
sergeev:
bitness es el mismo. esto es suficiente para la llamada
Si de acuerdo con Microsoft, a continuación, en los métodos donde DWORD < 0 es una condición, habrá una advertencia, porque DWORD no puede ser menor que 0. Esto no es esencial, por supuesto, sobre todo porque se puede ajustar la lógica de algunos métodos. En general, me gustaron estas dos clases :)
 
No entiendo muy bien cómo se implementa la seguridad de los hilos. Supongamos: varios procesos escriben y leen al mismo tiempo. Lógicamente, debería haber algo como Lockfile, pero no lo encontré en lib. ¿O ya está implementado a nivel winapi?
 
Al_key:
No entiendo muy bien cómo se implementa la seguridad de los hilos. Supongamos: varios procesos escriben y leen al mismo tiempo. Lógicamente, debería haber algo como Lockfile, pero no lo encontré en lib. ¿O ya está implementado a nivel winapi?

lib no tiene section binding, porque teóricamente el código puede ser ejecutado en diferentes procesos.

Para controlarlo, utilice su variante o https://www.mql5.com/es/code/1835.

Mutex - на чистом WinAPI
Mutex - на чистом WinAPI
  • votos: 29
  • 2013.08.20
  • o_O
  • www.mql5.com
Синхронизируем процессы ОС/EA/MT и т.д. Никаких самописных DLL. Настало время держать все под своим контролем!