Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я конечно не мега программер. Но слехка не понимаю где тут универсальность? uchar не может быть универсальным так как ограничивает пользователя, а именно: uchar предназначен только для положительных значений. Минимальное значение равно нулю, максимальное значение равно 255.
Любые данные выходящие за пределы значения uchar становятся равными максимальным или минимальным значениям uchar.
Исходя из сказанного я и спросил с самого начала "как передовать int или double". Я не улавливаю вашу мысль шеф.
ок. давайте небольшой экскурс.
1. рассмотрим пример char и uchar. обе переменные являются размером 1 байт
это значит что присваивая друг другу мы не теряем байты и значит, не теряем значения исходных данных.
посмотрите на такие выражения
Аналогичное относится и к long/ulong, int/uint
То есть переменные целого типа одного размера в байтах можно передавать друг другу без потери байт информации.
Это кстати значит то, что хоть эксперт и принимает MAGIC номера в ulong типе, но вы в своих программах всегда можете его задавать и читать в long, то есть знаковом формате
2. теперь смотрим на <какой_то_тип> и uchar.
Например int. Как вы знаете из sizeof(int) он имеет размер 4 байта. Это значит, что эти 4 байта в памяти можно запросто представить в виде uchar[4] массива
если будет double (это 8 байт), то его можно представить в виде массива uchar[8]
Это относится и к байтам строк - в MQL это массив ushort.
ну и соответственно если вы имеете структуру любого типа, то вы запросто можете любые данные предоставить в виде uchar массива.
Именно эти базовые понятия про байты и используются в MQL5 версии - виртуальные файлы в памяти CFastFile. В нем сохраняются любые данные в память uchar массива.
То есть если вам не нужно обмениваться данными с внешними программами. Или вы принимаете данные из другой программы в виде потока данных - например читаете интернет страницы, и эти данные не нужно сохранять все на диск, то лучше использовать CFastFile вместо виндового маппинга.
ну и напоследок для полного закрепления https://www.mql5.com/ru/articles/364
MT5 642 Win7 64 не работает, насколько я понял то после
hmem=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,size+HEAD_MEM,path); // создаем объект памяти
получается ошибка 1400,
а Vista 32 работает.
это из-за разного размера указателей в 32 и 64 системах
данный файл библиотеки сделан для 32 итного терминала.
но если вы используете 64 битный терминал, то нужно во всех местах, где подразумевается указатель (например тип PBYTE, LPVOID и т.д., и во всех memcpy) поставить 8-байтовый тип long.
а как подружить
выдает
а эти два инклюда друг без друга работают.
а как подружить
выдает
а эти два инклюда друг без друга работают.
попробовать воспользоваться разрешением контекста ::
Спасибо
только пришлось изменять стандартную библиотеку
что то мне кажется это не есть хорошо...Спасибо
только пришлось изменять стандартную библиотеку
что то мне кажется это не есть хорошо...вы не поняли.
я вам сказал про kernel32::GetLastError. Посмотрите как реализовано в моем коде.
если такой вариант не устраивает, то объявите импорт из kernel32 GetLastError например с int параметром. разницы при вызове не будет, но от конфликта уйдете.
вы не поняли.
я вам сказал про kernel32::GetLastError. Посмотрите как реализовано в моем коде.
если такой вариант не устраивает, то объявите импорт из kernel32 GetLastError например с int параметром. разницы при вызове не будет, но от конфликта уйдете.
Возможно я не верно излагаю.
но приходится
так как вот пример вашего кода с подключенной стандартной библиотекой
при компиляции выдает те же ошибки.
olyakish, прочитайте еще раз внимательно что я вам написал.
если вас не устраивает контекст, то я вам говорю именно про
вы не поняли.
я вам сказал про kernel32::GetLastError. Посмотрите как реализовано в моем коде.
если такой вариант не устраивает, то объявите импорт из kernel32 GetLastError например с int параметром. разницы при вызове не будет, но от конфликта уйдете.
При вызове в коде kernel32::GetLastError со своим контекстом, компилятор бажит вызов GetLastError без контекста.
Просто программистам нужно взять за правило MQL-аналоги стандартных функций WinAPI вызывать с контекстом. Тогда и проблем с последующей допилкой не будет.
А так исправишь стандартную библу а она возьми да обновись, опять лезь правь.
А так исправишь стандартную библу а она возьми да обновись, опять лезь правь.