2016-09-20 2 views

ответ

0

Будьте осторожны с любыми DLL-интерфейса, документации состояний MQL4:

Передача параметров
Все параметры простых типов передаются значениями, если это явно не указано, что они передаются по ссылке. Когда строка передается, адрес буфера скопированной строки передается; если строка передается по ссылке, адрес буфера этой строки без ее копирования передается функции, импортированной из DLL.

Структуры, которые содержат динамических массивы [], струны, классов, другие сложных структур, а также статических или динамическихмассивов [] из перечисления создававших объектов , не может быть передан в качестве параметра импортированной функции.

При передаче массива в DLL всегда передается адрес начала буфера данных (независимо от флага AS_SERIES). Функция внутри DLL ничего не знает о флаге AS_SERIES, переданный массив является статическим массивом неопределенной длины; для указания размера массива следует использовать дополнительный параметр.

Дополнительные сбои применяются ... Тогда как заставить его работать?

Возможно, прямая гетерогенная многопартийная распределенная обработка, которая передает скорее результаты, чем вызовы функций, независимо от всех кошмаров, поддерживающих только API-функции, связанные с DLL-функциями, является способом более безопасного способа. Используя этот подход, в течение последних нескольких лет, и с тех пор не имеет никаких проблем с Нового - MQL4.56789string -s, что захвативший оставаться string -s и молча начал становиться struct -s и т.д.

Стоят знать о.

Anyway, welcome and enjoy the Wild Worlds of MQL4 -- may enjoy to click and read other posts on issues in MQL4/DLL integration and/or signalling/messaging in MQL4 domains. Feel free to ask more

+0

да, они говорят о передаче параметров, но ничего о не получают структуры в качестве возвращаемого значения ... Я знаю осторожность, чтобы принять об импорте DLL (я на самом деле с помощью вина и я исполню код dll изначально благодаря WineLib, чтобы использовать unix-сокет в качестве точки связи ...) Я думаю о возвращении структуры, нет таких функций и приходится копировать запросы ... к счастью, накладные расходы не должны быть такими огромными .. –

+0

Как насчет того, чтобы не полагаться на ограничения синтаксиса на стороне MQL4 и использовать интеллектуальные многопользовательские сообщения ZeroMQ (обертки, доступные почти для всех недавно использованных языков + основные права), и пользоваться минимальными усилиями по расшифровке и анализу любого другого вида структурного маскирования представления ? – user3666197

+0

Как я понимаю, Zmq - это портативная библиотека обмена сообщениями, которая действительно интересна, но, взглянув на код, это не делает ничего, кроме как обеспечить атомарность сообщения и т. Д., Поэтому в моем случае это «легкая часть», которая уже работает;) –