Есть ли способ вернуть структуру из импортированной функции в MQL4, не передавая ее в качестве параметра и не создавая memcpy?Как вернуть структуру из импортированной DLL-функции в MQL4?
ответ
Будьте осторожны с любыми DLL-интерфейса, документации состояний MQL4:
Передача параметров
Все параметры простых типов передаются значениями, если это явно не указано, что они передаются по ссылке. Когда строка передается, адрес буфера скопированной строки передается; если строка передается по ссылке, адрес буфера этой строки без ее копирования передается функции, импортированной из DLL.
Структуры, которые содержат динамических массивы [], струны, классов, другие сложных структур, а также статических или динамическихмассивов [] из перечисления создававших объектов , не может быть передан в качестве параметра импортированной функции.
При передаче массива в DLL всегда передается адрес начала буфера данных (независимо от флагаAS_SERIES
). Функция внутри DLL ничего не знает о флагеAS_SERIES
, переданный массив является статическим массивом неопределенной длины; для указания размера массива следует использовать дополнительный параметр.
Дополнительные сбои применяются ... Тогда как заставить его работать?
Возможно, прямая гетерогенная многопартийная распределенная обработка, которая передает скорее результаты, чем вызовы функций, независимо от всех кошмаров, поддерживающих только API-функции, связанные с DLL-функциями, является способом более безопасного способа. Используя этот подход, в течение последних нескольких лет, и с тех пор не имеет никаких проблем с Нового - MQL4.56789
string
-s, что захвативший оставаться string
-s и молча начал становиться struct
-s и т.д.
Стоят знать о.
да, они говорят о передаче параметров, но ничего о не получают структуры в качестве возвращаемого значения ... Я знаю осторожность, чтобы принять об импорте DLL (я на самом деле с помощью вина и я исполню код dll изначально благодаря WineLib, чтобы использовать unix-сокет в качестве точки связи ...) Я думаю о возвращении структуры, нет таких функций и приходится копировать запросы ... к счастью, накладные расходы не должны быть такими огромными .. –
Как насчет того, чтобы не полагаться на ограничения синтаксиса на стороне MQL4 и использовать интеллектуальные многопользовательские сообщения ZeroMQ (обертки, доступные почти для всех недавно использованных языков + основные права), и пользоваться минимальными усилиями по расшифровке и анализу любого другого вида структурного маскирования представления ? – user3666197
Как я понимаю, Zmq - это портативная библиотека обмена сообщениями, которая действительно интересна, но, взглянув на код, это не делает ничего, кроме как обеспечить атомарность сообщения и т. Д., Поэтому в моем случае это «легкая часть», которая уже работает;) –