Библиотеки: File Mapping без DLL - страница 6

 
TheXpert:
Стандартная на то и стандартная, что нечего туда лезть, ни в коем случае. Есть ошибка -- репорт разработчикам. Никак иначе.

В стандартной библе вызов вот так GetLastError

а надо вот так ::GetLastError

Иначе kernel32::GetLastError багом идёт.

Как тут не править?

 
Urain:

Как тут не править?

я ж намекнул и показал, и написал.

#import

int GetLastError(int )

---

и всё. контекст свободен.

не хотите так - RtlGetLastError - аналогичен

 
sergeev:

я ж намекнул и показал, и написал.

#import

int GetLastError(int )

---

и всё. контекст свободен.

не хотите так - RtlGetLastError - аналогичен

Угу, я намёки с первого раза понимаю, только разработчики MQ тоже обращают на нас внимание, а то кодят непойми для кого а люди потом мучаться.
 
sergeev:

не хотите так - RtlGetLastError - аналогичен

RtlGetLastWin32Error? не аналогичен, там ошибку надо самому ручками обнулять
 
В процессе применения Ваших классов в своем коде столкнулся с такой проблемой: если объем shared memory больше 4096 байт, то memcpyX в CMemMapApi::Write / Read (строки 219 и 231 в memmaplib.mqh) выдает "Access Violation". Не могли бы подсказать "куда копать", чтобы "заставить" memcpy читать блоки памяти больше 4kb?
[Удален]  

Автору большой респект за проделанную работу. Если автор не против, включу эти два класса в свою библиотеку классов SCL.

Однако в классах есть ошибки в плане определения стандартных типов Microsoft, порождающих другие ошибки в алгоритме. К примеру тип DWORD не int, а uint. Из-за этого пришлось пересмотреть некоторые алгоритмы в классах, но это не составило большого труда.

 

_Konstantin_:

К примеру тип DWORD не int, а uint.

битность та же. этого достаточно для вызова
[Удален]  
sergeev:
битность та же. этого достаточно для вызова
Если в соответствии с Microsoft, то в методах где идет условие DWORD < 0, будет предупреждение, т.к. DWORD не может быть меньше 0. Это не существенно конечно, тем более что можно логику некоторых методов подправить. В целом эти два класса мне понравились :)
 
Не совсем понял, как потокобезопасность реализована? Допустим: несколько процессов пишут и читают одновременно. По логике должно быть что-то вроде Lockfile, но я его в либе не нашел. Или он уже реализован на уровне winapi?
 
Al_key:
Не совсем понял, как потокобезопасность реализована? Допустим: несколько процессов пишут и читают одновременно. По логике должно быть что-то вроде Lockfile, но я его в либе не нашел. Или он уже реализован на уровне winapi?

в либе не сделано привязки к секциям, так как теоретически код может выполнятся в разных процессах.

Для контроля юзайте или ваш вариант или например https://www.mql5.com/ru/code/1835

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