Librerie: Mappatura dei file senza DLL - pagina 6

 
TheXpert:
Lo standard è standard, quindi non c'è nulla da approfondire, non c'è modo. C'è un errore: segnalatelo agli sviluppatori. Non c'è altro modo.

Nella Bibbia standard, la chiamata è GetLastError.

ma dovrebbe essere così ::GetLastError.

Altrimenti kernel32::GetLastError è un bug.

Come non correggerlo?

 
Urain:

Come puoi non modificarlo?

Ho accennato e mostrato e ho scritto.

#import

int GetLastError(int )

---

e questo è tutto. Il contesto è libero.

Se non volete farlo in questo modo, RtlGetLastError è simile.

 
sergeev:

Ho accennato e mostrato e ho scritto.

#import

int GetLastError(int )

---

e il gioco è fatto: il contesto è libero.

Se non volete farlo in questo modo, RtlGetLastError è simile.

Sì, ho capito i suggerimenti della prima volta, solo gli sviluppatori di MQ ci prestano attenzione, altrimenti non fanno codice per nessuno e le persone soffrono.
 
sergeev:

non si vuole fare in questo modo - RtlGetLastError - simile

RtlGetLastWin32Error? non è simile, bisogna resettare l'errore con le proprie mani
 
Applicando le vostre classi al mio codice mi sono imbattuto nel seguente problema: se la dimensione della memoria condivisa è superiore a 4096 byte, memcpyX in CMemMapApi::Write / Read (linee 219 e 231 in memmaplib.mqh) mostra "Access Violation". Potreste dirmi "dove scavare" per "far leggere" a memcpy blocchi di memoria più grandi di 4kb?
[Eliminato]  

L'autore ha un grande rispetto per il lavoro svolto. Se all'autore non dispiace, includerò queste due classi nella mia libreria di classi SCL.

Tuttavia, ci sono errori nelle classi in termini di definizione dei tipi standard Microsoft che causano altri errori nell'algoritmo. Ad esempio, il tipo DWORD non è int ma uint. Per questo motivo, ho dovuto rivedere alcuni algoritmi delle classi, ma non è stato molto difficile.

 

_Konstantin_:

Ad esempio, il tipo DWORD non è int, ma uint.

La bitness è la stessa. Questo è sufficiente per chiamare
[Eliminato]  
sergeev:
Il bitness è lo stesso. Questo è sufficiente per la chiamata.
Se secondo Microsoft, nei metodi in cui DWORD < 0 è una condizione, ci sarà un avviso, perché DWORD non può essere inferiore a 0. Questo non è essenziale, naturalmente, soprattutto perché è possibile modificare la logica di alcuni metodi. In generale, mi sono piaciute queste due classi :)
 
Non ho capito bene come viene implementata la sicurezza dei thread? Supponiamo che diversi processi scrivano e leggano contemporaneamente. Logicamente, dovrebbe esserci qualcosa come Lockfile, ma non l'ho trovato nella libreria. Oppure è già implementato a livello di winapi?
 
Al_key:
Non ho capito bene come viene implementata la sicurezza dei thread? Supponiamo che diversi processi scrivano e leggano contemporaneamente. Logicamente, dovrebbe esserci qualcosa come Lockfile, ma non l'ho trovato nella libreria. O è già implementato a livello di winapi?

La lib non ha un binding di sezione, perché teoricamente il codice può essere eseguito in processi diversi.

Per controllarlo, usare la propria variante o https://www.mql5.com/it/code/1835.

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