Не верно.
В Win32 и Win64 sizeof(int) = sizeof(long) = 4 байтам ради глобальной совместимости(фактически пожертвовали лонгом), а в MQL5 используется более жесткое разграничение sizeof(int) = 4 и sizeof(long) = 8 байт.
Когда пишите связки MQL5 + DLL, всегда аккуратно используйте (лучше не используйте, ибо функционально он дублирующийся/лишний) тип long.
Из документации "Справочник MQL5 / Основы языка / Типы данных / Целые типы / Типы char, short, int и long"
- char - Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127.
- uchar - Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar предназначен только для положительных значений. Минимальное значение равно нулю, максимальное значение равно 255. Первая буква u в названии типа uchar является сокращением слова unsigned(беззнаковый).
- short - Целый тип short имеет размер 2 байта(16 бит) и, соответственно, позволяет выразить множество значений равное 2 в степени 16: 2^16=65 536. Так как тип short является знаковым и содержит как положительные, так и отрицательные значения, то диапазон значений находится между -32 768 и 32 767.
- ushort - Беззнаковым типом short является тип ushort, который также имеет размер 2 байта. Минимальное значение равно 0, максимальное значение 65 535.
- int - Целый тип int имеет размер 4 байта (32 бита). Минимальное значение -2 147 483 648, максимальное значение 2 147 483 647.
- uint - Беззнаковый целый тип uint занимает в памяти 4 байта и позволяет выражать целочисленные значения от 0 до 4 294 967 295.
- long - Целый тип long имеет размер 8 байт (64 бита). Минимальное значение -9 223 372 036 854 775 808, максимальное значение 9 223 372 036 854 775 807.
- ulong - Целый тип ulong также занимает 8 байт и позволяет хранить значения от 0 до 18 446 744 073 709 551 615.
Спасибо, теперь на стороне dll использую тип long long, а в mql long. Полет нормальный
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Допустим у меня в dll есть функция (неважно какая главная чтобы она возвращала указатель):
Тут все в порядке: для 64 битной винды int 8 байт для 32 он 4 байта. Верно?
В mql5 int - 4 байта, а long - 8 байт. Логично предположить, что функция в mql должна выглядить как-то так
Но на практике на моей 32битной винде получаются числа вроде 564919178746661772. Если вместо long использовать int, то, как понимаете, все работает, но 32х-битный указатель неприменим для 64х-битной системы.
Как решить проблему? Может я что-то упустил? По идее int в long должен конвертиться без проблем, там же нет потерь данных...