Библиотеки: 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. Настало время держать все под своим контролем!
Причина обращения: