![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
uchar - Беззнаковый символ, зачем использовать его для цикла? Это не имеет смысла... используйте int. Вы будете работать с улонгами, это то, чем является новое время даты ... и когда вы набираете текст, не думая об этом, в будущем вы получите предупреждение ... смиритесь с предупреждением или проигнорируйте его. Не надейтесь на лучшее, делайте то, что вы делаете сейчас, учитесь и понимайте.
То, что вы разместили на stackoverflow, имеет смысл для меня, я думаю, это хороший совет.
uchar был просто примером, поскольку мой вопрос был связан с использованием небольших типов переменных. uchar - это 1-байтовое положительное значение от 0 до 255, поэтому для цикла от 0 до 100 вы могли бы использовать 1-байтовый uchar.
Если вам нужно сохранить значение, возвращаемое функцией, а функция возвращает uchar, то используйте переменную uchar для сохранения возвращаемого значения... В оригинальном mql4 это не было проблемой, в новом mql4 это станет проблемой.
Когда я задавал вопрос, я не знал, зачем мне это нужно, поэтому я и задал вопрос lol...
Я не знал, будет ли 8-битный тип переменной обрабатываться быстрее, чем 32-битный, или медленнее, или так же, я не знал, будет ли 8-битное значение использовать меньше оперативной памяти или меньше места на диске. Поскольку теперь нам доступны эти маленькие типы переменных, мне просто было интересно узнать плюсы и минусы их использования, когда они соответствуют требованиям блока кода, по сравнению с 32-битными целыми числами повсеместно.
Я думал, что 32-битная ОС может обрабатывать четыре 8-битных значения одновременно, но не знал. Очевидно, нет. Это объясняет, почему 64-битная ОС на самом деле не намного быстрее 32-битной, за исключением того, что она может получить доступ к большему объему оперативной памяти. Я часто задавался этим вопросом.
У меня есть вопрос, для которого я не нашел решения.
Как использовать void&? То есть, если мне нужно передать какой-либо указатель в DLL. В справочном файле есть функции, которые используют этот тип void, но если я помещу его куда-нибудь в исходник, то он не скомпилируется. Я пытался использовать шаблон в качестве обходного пути, но шаблон запрещен в операторе #import.
Я справился с конструированием для отдельных типов, но я не могу реализовать передачу указателя массива void& в DLL, если я не укажу явный тип.
Есть ли какие-либо ограничения для передачи массива структур в DLL?
Предположим, MT4Structure - это простая структура.
Импортировав kernel32.dll, одиночная структура работает просто отлично:
, но я не могу заставить работать массив структур. Компилятор не скомпилирует MT4Structure&[], если передать егов качестве параметра к этому объявлению:
Существуют ли какие-либо ограничения на передачу массива структур в DLL?
Я не вижу проблем с чем-то подобным:
Это работает так, как ожидалось (при условии, что вы допускаете различное выравнивание структур по умолчанию в MT4 и DLL).
(BTW, я не уверен, каково сейчас внутреннее представление MQL4 bool, но я бы предпочел объявлять функции Win32 как возвращающие int. Win32-функции возвращают BOOL, а не bool из C++. BOOL - это макрос Windows для 4-байтового целого числа, значение которого равно 1/0, тогда как bool в C++ - это один байт. Если вы скажете MT4 ожидать от функций один байт возвращаемого значения, в то время как на самом деле они возвращают четыре байта, вы можете - хотя это очень маловероятно - получить повреждение стека).
Как использовать void&? Я имею в виду, если мне нужно послать какой-либо указатель в DLL.
Я не совсем понимаю, в чем суть вашего вопроса. Например, в документации Win32 API используется void* в значении "здесь принимается любой тип указателя на что угодно; функцию Win32 не волнует, какой у вас блок памяти".
Я не совсем понимаю, в чем суть вашего вопроса. Например, в документации Win32 API используется void* в значении "здесь принимается указатель на что-либо любого типа; функции Win32 неважно, какой у вас блок памяти".
Именно так. Но, похоже, в MQL4 это не совсем возможно, и использование шаблона не допускается внутри блока #import. Поэтому использование дополнительной структуры в winapi оборачивается ручным обновлением деклараций #import каждый раз, когда требуется новый тип. Что довольно неудобно для меня, так как я планировал управлять импортом в одном месте.
Именно так. Но, похоже, это не совсем возможно в MQL4, и использование шаблона не разрешено внутри блока #import. Поэтому использование дополнительной структуры в winapi приводит к ручному обновлению деклараций #import каждый раз, когда требуется новый тип. Что довольно неудобно для меня.