Bibliothèque: Mappage de fichiers sans DLL - page 6

 
TheXpert:
La norme est la norme, il n'y a donc rien à y faire, pas moyen. Il y a une erreur - signalez-la aux développeurs. Il n'y a pas d'autre moyen.

Dans la bible standard, l'appel est GetLastError.

mais il devrait être comme ceci ::GetLastError.

Sinon kernel32::GetLastError est un bug.

Comment ne pas le corriger ?

 
Urain:

Comment pouvez-vous ne pas l'éditer ?

J'ai fait des allusions, j'ai montré et j'ai écrit.

#import

int GetLastError(int )

---

et c'est tout. Le contexte est libre.

Si vous ne voulez pas procéder de cette manière, RtlGetLastError est similaire.

 
sergeev:

J'ai fait des allusions, j'ai montré et j'ai écrit.

#import

int GetLastError(int )

---

et c'est tout. Le contexte est libre.

Si vous ne voulez pas procéder de cette manière, RtlGetLastError est similaire.

Oui, j'ai compris les indices dès la première fois, seuls les développeurs MQ nous prêtent attention, sinon ils codent pour personne et les gens en souffrent.
 
sergeev:

ne voulez-vous pas procéder de cette manière - RtlGetLastError - similaire

RtlGetLastWin32Error ? pas similaire, vous devez réinitialiser l'erreur vous-même avec vos mains
 
En appliquant vos classes dans mon code, j'ai rencontré le problème suivant : si la taille de la mémoire partagée est supérieure à 4096 octets, memcpyX dans CMemMapApi::Write / Read (lignes 219 et 231 dans memmaplib.mqh) affiche "Access Violation". Pourriez-vous me dire "où creuser" pour "faire" lire à memcpy des blocs de mémoire de plus de 4kb ?
[Supprimé]  

L'auteur a un grand respect pour le travail effectué. Si l'auteur n'y voit pas d'inconvénient, j'inclurai ces deux classes dans ma bibliothèque de classes SCL.

Cependant, ces classes contiennent des erreurs dans la définition des types standard de Microsoft, qui entraînent d'autres erreurs dans l'algorithme. Par exemple, le type DWORD n'est pas int mais uint. Pour cette raison, j'ai dû réviser certains algorithmes dans les classes, mais cela n'a pas été très difficile.

 

_Konstantin_:

Par exemple, le type DWORD n'est pas un int, mais un uint.

Le nombre de bits est le même. Cela suffit pour appeler
[Supprimé]  
sergeev:
Le bitness est le même. Cela suffit pour l'appel.
Si selon Microsoft, dans les méthodes où DWORD < 0 est une condition, il y aura un avertissement, car DWORD ne peut pas être inférieur à 0. Ce n'est pas essentiel bien sûr, d'autant plus que vous pouvez modifier la logique de certaines méthodes. En général, j'ai bien aimé ces deux classes :)
 
Je ne comprends pas très bien comment la sécurité des threads est mise en œuvre ? Supposons que plusieurs processus écrivent et lisent en même temps. Logiquement, il devrait y avoir quelque chose comme Lockfile, mais je ne l'ai pas trouvé dans la librairie. Ou est-ce que c'est déjà implémenté au niveau du winapi ?
 
Al_key:
Je ne comprends pas très bien comment la sécurité des threads est mise en œuvre ? Supposons que plusieurs processus écrivent et lisent en même temps. Logiquement, il devrait y avoir quelque chose comme Lockfile, mais je ne l'ai pas trouvé dans la librairie. Ou est-ce que c'est déjà implémenté au niveau du winapi ?

La lib n'a pas de section binding, parce que théoriquement le code peut être exécuté dans différents processus.

Pour le contrôler, utilisez votre variante ou https://www.mql5.com/fr/code/1835.

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